UVA 10815-5.3-endy's First Dictionary(集合setの使い方)

3735 ワード

UVA 10815-5.3-endy’s First Dictionary(集合setの使い方)テーマ説明:リンク:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=835&problem=1756&mosmsg=Submission+received+with+ID+18662803この問題の意味は、英語の文章に、文章の中のすべての異なる単語を見つけて、辞書の順序で出力することです.テーマ分析:この問題は主にsetの使い方を勉強して、setもc++の中の新しいものです.集合:set set setは数学上の集合で、各要素は最大1回しか現れません.そして本ではsetが演算子より小さいことを定義していると言っていますが、入力したものは自動的に大きいものから小さいものに並べ替えられると理解しています.この問題は新しいものを理解しています.steringstream ssは、いくつかのデータをストリームに定義するために使われているようですか.そして一つのものに入力します.これに似ています.
stringstream ss(s);
        while(ss>>buf)
                dict.insert(buf);

前にsの中の非アルファベットの内容がすべてスペースになっているので、bufは1つの単語1つの単語を読み込み、スペースを読まない.ここにinsert()関数があります.私はこの関数を話す博文を見つけた.http://blog.csdn.net/hzw05103020/article/details/51785727他にも2行のコードがあります.
for(set<string>::iterator it = dict.begin();it != dict.end();++it)
        cout << *it << endl;

本の説明によると、set::iteratorは反復器を意味し、STLの重要な概念であり、ポインタの使い方に似ている.しかし、私もよく分かりません=.=
コードを入力:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;

set<string>dict;

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