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;
}

猜你喜欢

转载自blog.csdn.net/m0_38072683/article/details/80699668