题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2072
题目:
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
#
Sample Output
4
题解:使用map容器和string组合。处理单词之间的空格,判断map中的单词是否存在即可。需要注意的是,空格可能会出现在单词前面或者是连续出现空格。
代码及注释如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<string>
using namespace std;
char a[1005];
int main() {
while(gets(a)&&a[0]!='#') {
int ans = 0;
map<string,int> map;
string s="";//初始化
for(int i=0;i<strlen(a);i++) {
if(a[i]==' '&&s=="") continue;//处理多余的空格
if(a[i]==' ') {//单词间的空格
if(!map[s]) map[s]=++ans;//单词不存在,++ans
s = "";
continue;
}
s+=a[i];//叠加字符
if(i==strlen(a)-1) {//末尾单词,要包括最后一个字符
if(!map[s]) map[s]=++ans;//单词不存在,++ans
s = "";
}
}
cout<<ans<<endl;
}
return 0;
}