HDU - 2072
题目:
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend #
Sample Output
4
利用STL的set,但是需要注意字符串的处理,利用set的特性,建立一个中间字符串变量tmp,把当前单词暂时存在tmp中,根据判断条件(输入的字符串是否为空格或者到了末尾)来判断把tmp存入set中。
另一个需要注意的就是遍历的for需要从0到字符串最后的后面一个,为了防止什么都没有的情况。
代码:
#include<bits/stdc++.h>
using namespace std;
set<string> se;
void word(string str){
se.clear();
string tmp="";
for(int i=0;i<=str.size();i++){
if(str[i]==' '||i==str.size()){
if(tmp=="") continue;
se.insert(tmp);
tmp="";
}
else tmp+=str[i];
}
cout<<se.size()<<endl;
}
int main(){
string str;
while(getline(cin,str)&&str[0]!='#')
word(str);
return 0;
}
using namespace std;
set<string> se;
void word(string str){
se.clear();
string tmp="";
for(int i=0;i<=str.size();i++){
if(str[i]==' '||i==str.size()){
if(tmp=="") continue;
se.insert(tmp);
tmp="";
}
else tmp+=str[i];
}
cout<<se.size()<<endl;
}
int main(){
string str;
while(getline(cin,str)&&str[0]!='#')
word(str);
return 0;
}
该代码来源于杭电讨论区的朋友( 喜欢你的笑声)。