背景:这题只能照着书敲,学习C++的用法,主要学习见对代码的注解。
#include<iostream>
#include<sstream> //流的头文件
#include<iterator>
#include<cctype> //isalpha()的头文件,类似的还有isdigit()
#include<string>
#include<set>
using namespace std;
set<string> set1;
int main(void){
string string1,temp_string;
while(cin>>string1){ //C++输入流如果遇见eof会返回false,cin遇到空格,TAB,回车都结束读取,并且回车符被消耗。<span id="transmark"></span>
for(int i=0;i < string1.size();i++){
if(isalpha(string1.at(i))) string1.at(i)=tolower(string1.at(i)); //char tolower(char c);char toupper(char c);大小写转换在iostream中
else string1.at(i)=' '; //这里的思路很巧妙,把标点符号转换为空格,这样再把这个空格和字母混合的string1传入流中,流传出为真正的string
}
stringstream ss(string1); //创建一个string的流,并把string1导入流中
while(ss >> temp_string) set1.insert(temp_string); //从流里导出标准的string类,加入集合中,集合会自动取消重复,并升序排列
}
copy(set1.begin(),set1.end(),ostream_iterator<string>(cout,"\n")); //遍历输出集合
return 0;
}