Andy's First Dictionary

c++STL中Set的练习(可

去除字段中重复出现过的单词)

解题过程中遇到的问题:

  1. 如何以空格分割字符串
  2. 如何处理段中的, "等非字母字符

解决方案

  1. 用一个临时字符串存储处理过的字母,当遇到非字母字符时,将该字符串存入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;
    }
  2. 利用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的用法

https://www.cnblogs.com/hujunzheng/p/5042068.html

posted @ 2021-11-20 16:19  aya77  阅读(39)  评论(0)    收藏  举报