一道小题,数单词数
问题描述
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
set版本
set(集合)特点
- set中元素是从小到大排好序的
- set中没有重复元素
#include <bits/stdc++.h>
//c++中万能头文件
using namespace std;
typedef long long ll;
int main(void)
{
string str;
set<string> st; //去重加排序
while(getline(cin,str)) {
if(str == "#")
break;
st.clear(); //因为是多组输入, 每次set注意清空
stringstream ss(str);//括号里是输入的含空格的字符串
string tp;
while(ss >> tp){
st.insert(tp);
}
cout << st.size() <<endl;
}
return 0;
}
map版本
#include <bits/stdc++.h>
using namespace std;
int main(void){
int res = 0;
string word, tmp;
map <string, int> mp;
while(getline(cin,word)) {
if(word[0] == '#') break;
res = 0;
mp.clear();
stringstream ss(word);
while(ss >> tmp) {
if(mp[tmp] != 1){ //看是否这个单词出现过
mp[tmp] = 1;
res++; //这个变量不设也可。
}
}
cout<< mp.size() <<endl;
}
return 0;
}
感谢 yzx 大佬