简单的是题目输入没有符号只有字母但要统计不用单词;不同的是前天那个输入有符号,但是不用考虑单词;
这里用了,set容器
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend #
Sample Output
4
set集合是c++ STL中的一个容器,set具有以下两个特点:
- set中的元素都是排好序的
- set集合中没有重复的元素
常用操作:
- insert():插入某个元素
- begin():返回set容器的第一个元素的地址
- end():返回set容器的最后一个元素地址
- clear():删除set容器中的所有的元素
- empty():判断set容器是否为空
- max_size():返回set容器可能包含的元素最大个数
- size():返回当前set容器中的元素个数
- erase():删除迭代器指针it处元素
ac代码
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<string>
#include<iostream>
#include<cmath>
#include<ctime>
#include<sstream>
#include<set>
using namespace std;
int main()
{
string s;
while(getline(cin,s))
{
if(s=="#")
break;
istringstream ss(s); //下面讲解
string sss;
set<string> p; //p集合,其中包含很多个string
while(ss>>sss)
{
p.insert(sss);//插入
}
printf("%d\n",p.size());
}
return 0;
}
补充一下关于set的输出
for(set<string>::iterator it=p.begin();it!=p.end();it++)
cout<<*it<<endl;
这里::iterator迭代器,类似于指针。
关于
istringstream ss(s);
#include<iostream>
#include<sstream> //istringstream 必须包含这个头文件
#include<string>
using namespace std;
int main()
{
string str;
istringstream is(str); //is明明不确定
string s;
while(is>>s)
{
cout<<s<<endl;
}
}