紫书—关于例题5-3安迪的第一个字典的思考

  题目链接:https://vjudge.net/problem/UVA-10815

  解题思路:题意是说寻找不重复的单词,这时就可以想到用stl中的集合,但是写代码时还是要注意一点细节.

  AC代码展示:

#include<bits/stdc++.h>
using namespace std;
set<string>dict;
string a;
int main(){
    char ch;
    while((ch=getchar())!=EOF){ //不能用cin大段输入  应为样例中有“”
        if(isalpha(ch)){//判断是否是字母
            ch=tolower(ch);
            a+=ch;
        }else{
            if(a!=""){ // 避免加入的是空字符串
                if(!dict.count(a)){ //判断字符串是否存在
                    dict.insert(a);
                }
                a.clear();
            }
        }
    }
    for(auto i=dict.begin();i!=dict.end();i++){// 迭代器遍历集合元素
        cout<<*i<<endl; //与指针一样的用法
    }
}

注意事项:1.不能用cin读入字符串,应为可能为读入样例中的"",故只能用getchar()一个一个字符的读入.

                2.应为判断a是否为空字符串,应为空字符串也可以插入到set中,会导致presentation error.

                3.dict.count()返回集合dict中某个值元素的个数,不存在就返回0,存在返回1.因此可利用这个性质来判重.

                4.迭代器遍历集合,迭代器的用法和指针差不多.

posted @ 2021-05-10 09:08  江间暮云  阅读(49)  评论(0)    收藏  举报