思路:現在字符串末尾添加一個空格,然後以空格爲分隔符,分成一個個的單詞存入數組中間,然後計算數組中間有多少是重複的,總單詞數量減去重複的數量就是答案。
注意:"a aa a aa "這種字符串wa了一發。
代碼:
#include<stdio.h>
#include<string.h>
char a[1200],b[1200][1200];
int main()
{
while(gets(a)&&strcmp(a,"#"))
{
int i,j,k=0,t=0,num=0,l=strlen(a);//最開始的時候所有l都是用strlen(a)表示,然後wa了一發
a[l]=' ';
memset(b,0,sizeof(b));
for(i=0; i<l+1; i++)
{
if(a[i]==' '&&i>k)
{
while(a[k]==' ')
k++;
if(k>=i)
continue ;
for(j=k; j<i; j++)
b[t][j-k]=a[j];
t++;
k=i+1;
}
}
for(i=1; i<t; i++)
{
for(j=0; j<i; j++)
{
if(strcmp(b[i],b[j])==0)//判重
{
num++;
break;
}
}
}
printf("%d\n",t-num);
}
return 0;
}
還有一種c++的代碼簡單很多:
#include<iostream>
#include<sstream>
#include<set>
using namespace std;
int main()
{
string s,w;
while(getline(cin,s)&&s!="#") //注意c++中string可以比較,所以s!="#"這裏是雙引號
{
set<string>word; //set容器中不會有重複的元素,所以用set容器判重
stringstream ss(s); //將一串字符串轉化爲字符流(字符串中的空格將被視爲間隔符)
while(ss>>w) //將字符流一個個傳遞給w
word.insert(w); //將w插入容器中
cout<<word.size()<<endl; //輸出容器的大小
}
return 0;
}