杭电2072 单词数

http://acm.hdu.edu.cn/showproblem.php?pid=2072

                            单词数

lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。

Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。

Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。

Sample Input
you are my friend
#

Sample Output
4

方法1(map):

# include <iostream>
# include <map>
# include <sstream>
# include <string>

using namespace std;

int main(){

    map<string,bool> p;
    string line;
    while(getline(cin,line)&&line[0]!='#'){
        p.clear();
        stringstream ss;//创建一个字符串流 
        ss<<line;//把读取的数据方法哦字符串流中 
        string word;        
        while(ss>>word){
            p[word] = true;
        }
        cout<<p.size()<<endl;
    }

    return 0;
}

方法2(set):

# include <iostream>
# include <string>
# include <set>
# include <sstream>

using namespace std;
int main(){

    set<string> s;
    string line;

    while(getline(cin,line)&&line[0]!='#'){
        stringstream ss;
        ss<<line;

        string word;
        while(ss>>word){
            s.insert(word);
        }

        cout<<s.size()<<endl;
        s.clear();
    }

    return 0;
}

方法3(strtok):
strtok
语法:

#include

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<fstream>
#include<set>
using namespace std;
set<string> h;
char p[1000005];
int main()
{

    while(gets(p)&&p[0]!='#')
    {
        h.clear();
        char *s=strtok(p," ");
        while(s!=NULL)
        {
            string word="";
            word+=s;
            h.insert(word);
            s=strtok(NULL," ");
        }
        cout<<h.size()<<endl;
    }

    return 0;
}

引用杭电:
输入一行由小写字母和空格组成的句子,计算相同单词的个数。
需要注意的几点:
1) 如果一行句子只有空格,则有0个单词。
2) 如果一行句子由空格开头,不能算作单词个数。
3) 如果两个单词之间有n个空格隔开,不能算作单词个数。
4) 如果句子由n个空格结尾,不能算作单词个数。
5) 相同的单词的个数只是一个。

你可能感兴趣的:(STL,杭电)