题干:
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend #
Sample Output
4
解题报告:
恕我直言这题是真鸡儿无聊,,你不用gets或者geline是死活AC不了的、、因为就算你再怎么神奇的操作,考虑的再严密,,他样例第一行万一 上来一个空格 然后就回车了、、你咋整?本来应该输出0的,,你就直接读入了,因为你不可能程序一开始就先读一个ch然后判读如果不是空格的话再存入字符串中啊!!那岂不是太麻烦了。,,,为了这个题没必要,于是直接上istringstream就好了。。。
AC代码:
#include<iostream>
#include<cstdio>
#include<sstream>
#include<set>
using namespace std;
int main()
{
string s;
while(getline(cin, s) && s != "#") {
istringstream in(s);
set<string> ss;
string w;
while(in>>w)
ss.insert(w);
cout << ss.size() << endl;
}
return 0;
}
WA代码:
#include<set>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#define ll long long
using namespace std;
string s;
set<string> ss;
int main()
{
char ch;
while() {
if(s[0] == '#') break;
ss.clear();
ss.insert(s);
ch=getchar();
if(ch != '\n') {
while(cin>>s) {
ch=getchar();
if(s[0] == '#') break;
ss.insert(s);
if(ch=='\n') break;
}
}
printf("%d\n",ss.size());
}
return 0;
}