统计不同单词的个数以输入#号结束。
这个题大家都用map,我用c语言写了一个
#include<stdio.h>
#include<string.h>
char c[10000]; //存放输入字符串
char w[10000][100]; //存放单词
int main()
{
while(gets(c))
{
if(c[0]=='#')
break;
int flag = 0;
for(int i = 0; i < strlen(c); i++) //如果输入全为空格输出0;
{
if(c[i] != ' ')
flag = 1;
}
if(flag == 0)
{
printf("0\n");
continue;
}
int i,j=0,k=0,l=0,a=0,b;
for(i=0; i<10000; i++) //对数组进行初始化
for(j=0; j<100; j++)
w[i][j]='\0';
int t=strlen(c);
c[t]=' '; //为后面判断使用
for(i=0,b=0; i<t; i++)
{
if(k==0)
if(c[i]!=' ') //这一段是防止前几个不是字母的情况
{
k=1;
}
if(k==1)
{
if(c[i]!=' ') //存放单词
{
w[b][a]=c[i];
}
a++;
if(c[i]==' '&&c[i+1]!=' ') //当c[i]==' '并且c[i+1]不是空格时就说明新的单词开始了,要进行b的重复值和a的初始化
{ //上面的c[t]=' '就是为了这时的判断用的。
b++;
a=0;
}
}
}
for(i=0; i<=b; i++) //判断不同单词的个数。
{
for(j=0; j<i; j++)
{
if(strcmp(w[i],w[j])==0)
{
break;
}
}
if(j>=i)
l++;
}
printf("%d\n",l);
}
return 0;
}