单词数

xiaoxiao2021-02-27  298

单词数

lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。 Input 有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。 Output 每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。 Sample Input you are my friend # Sample Output 4

本来AC了一道水题就没想着要写博客的,只不过听取了大佬的意见,用了set集合,才发现大佬给的方法写出来的代码特短

第一次AC代码:

思路很简单,把所有的单词存在数组里,然后只要没有重复出现过,就把总数加一

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; char s[10005]; char ss[1000][100005]; main (){ while(gets(s)){ if(s[0]=='#') break; int len=strlen(s); int i=0,t=0,l=0; while(i<len){ if(s[i]==' ') while(s[i++]!=' '); else { while(s[i]!=' '&&s[i]!='\0') ss[t][l++]=s[i++]; ss[t][l]='\0'; t++; l=0; } } int flag=0,ans=0; for(int i=0;i<t;i++) { flag=0; for(int j=0;j<i;j++) if(strcmp(ss[i],ss[j])==0) { flag=1; break; } if(!flag) ans++; } printf("%d\n",ans); } }

听取大佬意见后AC代码:

直接运用SET集合的不可重复性,调用字符串的分割函数,得到集合的size即为所求,很显然,代码剪短了很多

#include<cstdio> #include<cstring> #include<cctype> #include<algorithm> #include<set> #include<cstring> #include<string> using namespace std; char a[1005]; int main (){ set<string> m; while(gets(a)&&a[0]!='#'){ m.clear(); char * tmp=strtok(a," "); while(tmp!=NULL){ m.insert(tmp); tmp=strtok(NULL," "); } printf("%d\n",m.size()); } }

转载请注明原文地址: https://www.6miu.com/read-8358.html

最新回复(0)