有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。统计一篇文章里不同单词的总数。
you are my friend #
4
这道题其实不难,但是将单词一个一个分出来,在去掉相同的单词,如果用c语言来写就代码比较长,写起来比较麻烦。但如果用c++来写代码就很短,用strtok切割单词,再用C++的字符串集合(set<string>)来去掉相同的单词是比较简单方便的。
#include<stdio.h> #include<string.h> char a[1000],b[300][100]; int main() { int count,i,j,k; while(gets(a)) { if(a[0]=='#') break; int s; s=strlen(a); if(s==1) { printf("1\n"); continue; } for(i=0;i<s;i++) if(a[i]!=' ') break; if(i==s-1) printf("0\n"); else { count=0; int h=0; for(j=i;j<s;) { if(a[j]!=' ') { for( k=0;a[j]!=' '&&j<s;k++,j++) b[h][k]=a[j]; h++; } if(a[j]==' ') j++; } for(j=0;j<300;j++) if(b[j][0]!='\0') count++; int count1=0; for(j=0;j<count;j++) for( k=j+1;k<count;k++) if(strcmp(b[j],b[k])==0) { b[k][0]='\0'; } for(j=0;j<count;j++) if(b[j][0]!='\0') count1++; { printf("%d\n",count1); memset(a,'\0',sizeof(a)); for(i=0;i<count;i++) memset(b[i],'\0',sizeof(b[i])); } } } return 0; }