单词数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 63485 Accepted Submission(s): 15817
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend #
Sample Output
4
说明:
开始我打算用cin输入,然后单个判断,getchar判断\n后来发现没有考虑特殊情况。所以这种方法就放弃了。
(代码二)
然后我用getchar一个一个获取,然后连接成一个string。放入set集合中。最后输出。
(代码一)
后来我再网上找找大神们的写法,学到了一个新的东西istringStream。作用是从string对象中读取字符。
先用getline读取每一行,然后得到相应的istringStream,最后输入到临时字符串。这样就能把她们分离放到set中。
代码一:
#include<iostream>
#include<string>
#include<sstream>
#include<set>
using namespace std;
int main(){
string a;
set<string> b;
while(getline(cin,a)&&a[0]!='#'){
istringstream is(a);
string s;
while(is>>s){
b.insert(s);
}
cout<<b.size()<<endl;
b.clear();
}
return 0;
}
代码二:
#include<iostream>
#include<string>
#include<set>
using namespace std;
set<string> s;
int main(){
char c;
string a = "";
while((c=getchar())!='#'){
while(c != '\n'){
if(c != ' ')a += c;
while((c = getchar()) != ' '&&c != '\n'){
a += c;
}
if(a.size() != 0){
s.insert(a);
}
a = "";
}
cout<<s.size()<<endl;
s.clear();
}
return 0;
}