题目描述:
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend #
Sample Output
4
思路:
题目要求计算出英文文章中不相同单词的总数,这里就要想到使用set容器。下面是关于set容器的介绍:
set容器是C++标准库中的一种关联容器。所谓关联容器就是通过键(key)来读取和修改元素。与map关联容器不同,它只是单纯键的集合。set容器的每一个键只能对应一个元素,即不存在键相同的不同元素。
于是乎,如果我们把英文句子拆分为一个个独立的单词,将其依次装入set容器中,set容器就会自动帮助我们去除重复的单词,最后计算一下容器的大小,就能得到文章中不同单词的总数。
以单词为单位拆分文章字符串,可以使用stringstring类,这个类包含在sstream头文件中。
strstream类支持C++风格的字符流的输入输出操作,当用stringstream类操作造字符串流时,空格会成为字符串参数的内部分界,我们可以正好利用这一特性将英文句子拆分。
实现(C++):
#include <iostream>
#include <sstream>
#include <set>
#include <string>
using namespace std;
int main(){
string sentence;
set<string> mySet;
while(getline(cin, sentence)){
if(sentence=="#")
break;
stringstream ss(sentence);
string word;
while(ss>>word)
mySet.insert(word);
cout<<mySet.size()<<endl;
mySet.clear();
}
return 1;
}