题目链接: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.迭代器遍历集合,迭代器的用法和指针差不多.
原文:https://www.cnblogs.com/acmerhome/p/14749685.html