题目描述
统计一篇文章里不同单词的总数。
输入
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由大小写字母和空格组成,没有标点符号,遇到#时表示输入结束。每篇文章的单词数小于1000,每个单词最多由30个字母组成。
输出
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
样例输入 Copy
you are my friend
样例输出 Copy
4
代码
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k,sum,len;
char a[30000],b[1000][31];
while(gets(a),strcmp(a,"#")!=0)
{
len=strlen(a); //求字符串长度
sum=0; //统计单词的个数
for(i=0;i<len;i++)
{
if(a[i]==' ')
continue;
else
{ //求单词个数并把单词存到二维字符数组中
for(j=0;a[i]!=' '&&i<len;j++)
b[sum][j]=a[i++];
b[sum][j]='\0'; //给这个单词加上字符串结束标志
sum++;
}
}
//去除重复的单词
k=sum;
for(i=0;i<k-1;i++)
for(j=i+1;j<k;j++)
{
//&&b[i][0]!='\0'这个条件加不加都可以,但加上严谨点
if(strcmp(b[i],b[j])==0&&b[i][0]!='\0')
{
b[i][0]='\0';
sum--;
}
}
printf("%d\n",sum);
//把二维字符数组b[1000][31]初始化,便于下一次输入的单词数统计
while(sum--)
b[k][0]='\0';
}
return 0;
}