【题目描述】
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
【Input】
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
【Output】
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
【Sample Input】
you are my friend
#
【Sample Output】
4
【分析】
好好理解题的意思!真的,我之前理解错了,Wrong Answer了两遍。然后,这道题其实是一道语言题,如果很好地利用了C++中提供的工具,代码不会长。
这道题涉及到:字符串切分,以及STL中的set(元素不可重复)
【代码】
#include<iostream>
#include<set>
#include<cstdio>
#include<cstring>
#include<sstream> //istringstream所用头文件
using namespace std;
const int maxn = 100000;
char article[maxn];
set<string> words; //字符串的集合,不允许重复
int main()
{
string word;
while(gets(article)) //使用gets才能接收带有空格的字符串
{
words.clear(); //先清空set
if(strlen(article)==1 && article[0]=='#') break; //碰见“#”退出程序
istringstream is(article);
while(is>>word) //拆分字符串
{
words.insert(word); //将拆分好的字符串放入set里面
}
cout<<words.size()<<endl; //输出set的大小,即不同单词的数量
}
}