背景:这种题,我只能说,原谅我是新手,一点不会,于是又只有照着书上打出来。
学习:c++里面set的一些基本用法。还有isalpha()函数和tolower()函数,isalpha()函数相当于isupper()||islower()的作用,为判断一个字符是否为英文字符,tolower()为将一个字符转变成小写字符,与之相反的为tosupper()函数。代码中的set<string>::iterator中的iterator是迭代器的意思,是STL中的重要概炼,类似于指针。
注:set和stringstream的学习可以参照我转载的两篇文章,在c++分类里面。
#include <iostream> #include <string> #include <set> #include <sstream> using namespace std; set<string> dict; int main() { string s,buf; while(cin>>s)//C++输入流如果遇见eof会返回false,cin遇到空格,TAB,回车都结束读取,并且回车符被消耗。 { for(int i=0;i<s.length();i++) { if(isalpha(s[i])) s[i]=tolower(s[i]); else s[i]=' ';//将标点符号转换为空格,作为单词的分界点。 } stringstream ss(s); while(ss>>buf) dict.insert(buf);//从流里导出标准的string类,加入集合中,集合会自动取消重复,并升序排列 } for(set<string>::iterator it=dict.begin();it!=dict.end();++it) cout << *it<< endl;//输出集合中的每个元素 return 0; }
时间: 2024-10-12 22:18:29