目录
1178:题目描述
统计一篇文章里不同单词的总数。
输入
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由大小写字母和空格组成,没有标点符号,遇到#时表示输入结束。每篇文章的单词数小于1000,每个单词最多由30个字母组成。
输出
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
答案:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
int i,j,k,a,b;
char s[10000],w[100][100]; // 一维数组接受整句话,二维数组把单词分开
while(gets(s))
{
if(s[0]=='#') //当接受为‘#’时结束
break;
a=0,b=0,k=0;
for(i=0; s[i]!='\0';)//将s中的字符存到二位数组中,空格不存
if(s[i]==' ')//跳过起始空格
i++;
else
{
while(s[i]!='\0'&&s[i]!=' ')//跳过结束的/0,后面有空格时结束存储
w[a][b++]=s[i++];
a++;
b=0;//按单词存 w[0]为第一个单词,w[1]为第二个单词
}
int flag=0;
for(i=0; i<a; i++)//记录非重复单词,a代表单词个数
{
flag=0;
for(j=0; j<i; j++)//w[i]代表第二个往后,w[j]从0到i-1,分别比较
if(strcmp(w[i],w[j])==0)
flag++;
if(flag==0)
k++;
}
printf("%d\n",k);
memset(s,'\0',sizeof(s)); //这里清空两个字符数组,从而不影响下次循环使用。
memset(w,'\0',sizeof(w));
}
return 0;
}