/*这里有好几个小技巧,是看了刘汝佳的书后稍微改了一下,对于此题那几个简单函数代码中有注释,不再多说,主要是引用到了set这个东西 ,主要用set声明一个string类,
原因是set中insert时会自动排好,默认从小到大的顺序,且将重复的只出现一次的完美性质与这道题结合在了一起,小技巧在sstream>>buf那里自动将空格跳过*/
</pre><pre code_snippet_id="1887750" snippet_file_name="blog_20160919_4_1635702" name="code" class="cpp">#include <iostream>//isalpha 和 tolower 的头文件
#include <set>
#include <string>//getline的头文件
#include <sstream>
using namespace std;
set<string> dict;
int main(){
string s, buf;
while(getline(cin, s)){//getline可以保留空格比cin输入简单多了
dict.clear();//这里对set要进行清空
for(int i = 0; i < s.length(); i++){
if(isalpha(s[i])) s[i] = tolower(s[i]);//isalpha 函数是判断字符是否为字母, tolower 函数是将大写字母改写为小写字母
else s[i] = ' ';
}
stringstream ss(s);//这里是将s这个字符串写进ss
while(ss >> buf) dict.insert(buf);//在循环输入的时候将空格字符自动跳过进行下一个直到字符串末尾
for(set<string>::iterator it = dict.begin(); it != dict.end(); it++)
cout<<*it<<endl;
}
return 0;
}