HDU2072 单词数【水一水】
单词数
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;
}
                
            
        
浙公网安备 33010602011771号