HDU 2072 单词数
单词数
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
代码:
第一种方法:strtok函数和指针数组实现
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int i,j,t,sum,k; 6 char *v[100]; 7 char s[1000]; 8 int b[100]; 9 while(gets(s)) 10 { 11 memset(b,1,sizeof(b)); 12 if(s[0]=='#') 13 break; 14 i=0; 15 v[i]=strtok(s," "); 16 while(v[i]) 17 { 18 i++; 19 v[i]=strtok(NULL," "); 20 } 21 for(j=0;j<i-1;j++) 22 for(t=j+1;t<i;t++) 23 if(strcmp(v[j],v[t])==0) 24 b[t]=0; 25 for(sum=0,k=0;k<i;k++) 26 if(b[k]) 27 sum++; 28 printf("%d\n",sum); 29 } 30 return 0; 31 }
第二种方法:用set实现
1 #include<set> 2 #include<string> 3 #include<iostream> 4 #include<cstdio> 5 #include<cstring> 6 using namespace std; 7 8 int main() 9 { 10 //freopen("in.txt","r",stdin); 11 int i,j; 12 char temp[2005]; 13 char s[2005]; 14 string sub; 15 while(gets(s)&&strcmp(s,"#")!=0) 16 { 17 set<string>S; 18 int len=strlen(s); 19 s[len]=' '; 20 s[++len]='\0'; 21 for(i=0;i<len;i++) 22 if(s[i]!=' ')break; 23 for(j=0;i<len;i++) 24 { 25 if(s[i]==' ') 26 { 27 if(s[i+1]==' ')continue; 28 temp[j]='\0'; 29 j=0; 30 sub=temp; 31 S.insert(sub); 32 continue; 33 } 34 temp[j++]=s[i]; 35 } 36 int ans=S.size(); 37 cout<<ans<<endl; 38 } 39 return 0; 40 }