安迪的第一个字典(Andy's First Dictionary,Uva 10815)

输入一个文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出。单 词不区分大小写。

样例输入:

Adventures in Disneyland

Two blondes were going to Disneyland when they came to a fork in the road.

The sign read: "Disneyland Left." So they went home.

样例输出(为了节约篇幅只保留前5行):

a

adventures

blondes

came

disneyland

【分析】

本题没有太多的技巧,只是为了展示set的用法:由于string已经定义了“小于”运算符, 直接使用set保存单词集合即可。注意,输入时把所有非字母的字符变成空格,然后利用 stringstream得到各个单词。

#include <iostream>
#include<string>
#include<set>
#include<sstream>
using namespace std;

set<string> dict;  //string 集合 

int main(){
    string s,buf;
    while(cin>>s){
        for(int i=0;i<s.length();i++){
            if(isalpha(s[i])) s[i]=tolower(s[i]);else s[i]=' ';
        }
        stringstream ss(s);
        while(ss>>buf ) dict.insert(buf);
        
    }
    for(set<string>::iterator it = dict.begin();it!=dict.end();++it){
        cout<<*it<<"\n";
    }
    return 0;
}

 

上面的代码用到了set中元素已从小到大排好序这一性质,用一个for循环即可从小到大 遍历所有元素。iterator的意思 是迭代器,是STL中的重要概念,类似于指针。和“vector类似于数组”一样,这里的“类似”指 的是用法类似。

posted @ 2019-02-26 20:37  芩溪儿  阅读(586)  评论(0编辑  收藏  举报