单词数
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;
}