1185: 零起点学算法92——单词数
Time Limit: 1 Sec Memory Limit: 32 MB 64bit IO Format: %lldSubmitted: 2531 Accepted: 384[][][]Description
BobLee 最近忙着考研,话说某一天当他正在看一篇英语阅读时,突然想到想去统计下这篇文章不同单词的个数,由于BobLee很忙,所以想让你帮忙统计一下
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。(保证每行不超过1000个字符)
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数
Sample Input
you are very kind#
Sample Output
4 参考代码: Re:先设置一个字符型数组来存储字符,然后逐一将每一个单词存到二维数组中。接着排序,然后统计不同即可
#include#include #include #define maxn 10001char paper[maxn][100]= { '\0'};char str[maxn]= { '\0'};int cmp(const void *a,const void *b){ return strcmp((char *)a,(char *)b);}int main(){ int i,count,k; int flag; while(gets(str),*str!='#') { flag=1; count=-1; memset(paper,'\0',sizeof(paper)); for( i=0 ; str[i]!='\0' ; i++ ) { if(flag&&str[i]!=' ') { flag=0; count++; k=0; } else if(flag==0&&str[i]==' ') { flag=1; continue; } if(str[i]!=' ') { paper[count][k++]=str[i]; } } memset(str,'\0',sizeof(str)); //for(i=0;i<=count;i++) //puts(paper[i]); if(count>0) qsort(paper,count+1,100*sizeof(char),cmp); /* for(i=0;i<=count;i++) puts(paper[i]); */ int sum=1; for(i=1; i<=count; i++) { if(strcmp(paper[i-1],paper[i])!=0) sum++; } if(count==-1) sum=0; printf("%d\n",sum); } return 0;}
2.map
1 # include2 # include
3.set
1 # include2 # include 3 # include 4 # include 5 6 using namespace std; 7 int main(){ 8 9 set s;10 string line;11 12 while(getline(cin,line)&&line[0]!='#'){13 stringstream ss;14 ss< >word){18 s.insert(word);19 }20 21 cout< <
4.strtok
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 set h;10 char p[1000005];11 int main()12 {13 14 while(gets(p)&&p[0]!='#')15 {16 h.clear();17 char *s=strtok(p," ");18 while(s!=NULL)19 {20 string word="";21 word+=s;22 h.insert(word);23 s=strtok(NULL," ");24 }25 cout< <
Re:输入一行由小写字母和空格组成的句子,计算相同单词的个数。 需要注意的几点:
1) 如果一行句子只有空格,则有0个单词。
2) 如果一行句子由空格开头,不能算作单词个数。
3) 如果两个单词之间有n个空格隔开,不能算作单词个数。
4) 如果句子由n个空格结尾,不能算作单词个数。
5) 相同的单词的个数只是一个。