你是否还有更好的方法??
今天在做ACM题的时候遇到了这样一道题:lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
这是我写的代码,可是写完之后发现这种方法不是很好,想问一下高手有没有更好的写法呢???Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
# include <stdio.h>
# include <string.h>
char words[1000] ;
char *pstr[1000] ;
int main()
{
int i , j ;
char *token ;
while(gets(words) != NULL && words[0] != '#')
{
i = 0 ;
token = strtok(words , " ") ;
pstr[i] = token ;
for( ; token != NULL ; token = strtok(NULL , " "))
{
for(j = 0 ; j < i + 1 ; j++)
if(strcmp(token , pstr[j]) == 0)
break ;
if(j == (i + 1))
{
i++ ;
pstr[i] = token ;
}
}
printf("%d\n" , i+1) ;
}
return 0 ;
}
# include <string.h>
char words[1000] ;
char *pstr[1000] ;
int main()
{
int i , j ;
char *token ;
while(gets(words) != NULL && words[0] != '#')
{
i = 0 ;
token = strtok(words , " ") ;
pstr[i] = token ;
for( ; token != NULL ; token = strtok(NULL , " "))
{
for(j = 0 ; j < i + 1 ; j++)
if(strcmp(token , pstr[j]) == 0)
break ;
if(j == (i + 1))
{
i++ ;
pstr[i] = token ;
}
}
printf("%d\n" , i+1) ;
}
return 0 ;
}
期待ing