单词数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 65932 Accepted Submission(s): 16587
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend #
Sample Output
4
1)这道题十分简单,我就是没看见那个不能有重复的单词
复习了很多东西,嗯。
#include <iostream>
#include <stdio.h>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> handle(string s)
{
stringstream ss(s);
string temp;
vector<string> vec;
while(ss>>temp)
{
vec.push_back(temp);
}
sort(vec.begin(), vec.end());
vec.erase(unique(vec.begin(), vec.end()), vec.end());
// for(int i=0; i<vec.size(); i++)
// cout << vec[i] << endl;
return vec;
}
int main()
{
string str;
while(getline(cin, str, '\n')&&str[0]!='#')
{
vector<string> sstr = handle(str);
cout << sstr.size() << endl;
}
return 0;
}
对vector中使用unique的总结如下:
1)unique的头文件为algorithm
2)unique会返回一个迭代器,指向的是去重后的最后一个有效元素的后面一个位置。
序列 | 6 | 2 | 3 | 1 | 3 | 2 | 4 | 2 | 3 |
---|---|---|---|---|---|---|---|---|---|
sort | 1 | 2 | 2 | 2 | 3 | 3 | 3 | 4 | 6 |
unique | 1 | 2 | 3 | 4 | 6 | 2 | 2 | 3 | 3 |
使用unique,返回的迭代器指向的是6后面的2,需要使用erase删除元素。记得先排序!!!