Andy's First Dictionary
c++STL中Set的练习(可
去除字段中重复出现过的单词)
解题过程中遇到的问题:
- 如何以空格分割字符串
- 如何处理段中的, "等非字母字符
解决方案
- 用一个临时字符串存储处理过的字母,当遇到非字母字符时,将该字符串存入set
#include <bits/stdc++.h> using namespace std; set<string>dic; int main() { string s1,s2; while(cin>>s1) { for(int i=0; i<s1.length(); i++) { if(isalpha(s1[i])) { s1[i]=tolower(s1[i]);//将大写字母转成小写 s2+=s1[i]; //拼接至临时字符串 } else { if(s2.length()) //当遇到非字母字符时,说明一个单词结束了 { dic.insert(s2); s2.clear(); } } } if(s2.length()) //处理当以字母结尾的情况 { dic.insert(s2); s2.clear(); } } set<string>::iterator it=dic.begin(); while(it!=dic.end()) { cout<<*it<<endl; it++; } return 0; } - 利用stringstream,stringstream能一遇到str里的空格就将str分割
//核心代码 if(isalpha(str[i]))str[i]=tolower(str[i]);else str[i]=' '; string st;stringstream ss(str); while(ss>>st)dict.insert(st);
附:stringstream的用法
浙公网安备 33010602011771号