Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend #
Sample Output
4
思路:
将输入字符串重新按照单词组合并保存下来,即a[i][j]中 i表示每个单词,j表示单词内字母然后在新数组中筛出重复单词,记录不重复单词数。
代码:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char s[1000];
while(strcmp(gets(s),"#")!=0)//连续输入字符且不为#时
{
char a[1000][1000];//每个单词分别保存
int i=0,j=0,l=0;//初始化,i表示每个单词,j表示单词内字母
while(l<strlen(s)) //或者s[l]!='\0'
{
if(s[l]==' ')//遇到空格则跳到下一个字符
l++;
else
{
while(s[l]!=' '&&s[l]!='\0')//遇到空格或\0均结束
{
a[i][j]=s[l];//保存该字符
j++;
l++;
}
a[i][j] = '\0'; //字符串以\0结尾,防止下面读取出错
i++;//存完一个单词
j=0;//单词字母清0
}
}
int m,n,f,count=0;
for(m=0; m<i; m++){
f= 0;
for(n=m+1; n<i; n++){
if(strcmp(a[m],a[n])==0){
f = 1;
}数组内每个单词与后一个比较,若相同则标记出来
}
if(f==0){
count++;//没有重复则单词数加一
}
}
printf("%d\n",count);
}
return 0;
}