【杭电oj】2072 - 单词数(STL - string & map)

来源:互联网 发布:淘宝代销如何刷单 编辑:程序博客网 时间:2024/05/18 15:25

点击打开题目

单词数

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 43983    Accepted Submission(s): 10688


Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
 

Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
 

Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
 

Sample Input
you are my friend#
 

Sample Output
4
 

Author
Lily
 

Source
浙江工业大学网络选拔赛



先在句子最前面和最后面添加空格,然后查找两两空格之间的单词,用map记录。最后统计更新ans值就行了。


代码如下:

#include <cstdio>#include <string>#include <cstring>#include <map>#include <iostream>#include <algorithm>using namespace std;struct vo{int st,endd;}data[1111];int main(){string str;int num,ans;while (getline(cin,str)) {if (str == "#")break;ans = 0;num = 0;str.insert(0," ");str += " ";//cout << str << endl;int l = str.size();for (int i = 0 ; i < l ; i++)//分离出每一个单词 {if (str[i] == ' ' && (str[i+1] >= 'a' && str[i+1] <= 'z')){for (int j = i + 1 ; j < l ; j++){if ((str[j] >= 'a' && str[j] <= 'z') && (str[j+1] == ' ')){data[num].st = i + 1;data[num++].endd = j;break;//查到一个后结束查找 }}}}map<string,int> ant;string t;for (int i = 0 ; i < num ; i++){t = str.substr(data[i].st,data[i].endd - data[i].st + 1);if (ant[t] == 0)//为0的话更新ans值ans++;ant[t]++; }printf ("%d\n",ans);}return 0;}


0 0
原创粉丝点击