set自动排序去重 stringstream流分割字符

链接:https://vjudge.net/problem/UVA-10815#author=0

题意:给几段句子,按字典序筛选出单词。

题解:用C的话太麻烦,不如用自动去重并排序的set容器。有个地方需要考虑,就是单词连接着(:“)。这被看来是一个string。所以非字母的的要先变为空格。因为stringstream是以空格来分单词的。

ac代码:

#include<iostream>
#include<set>
#include<string>
#include<sstream>
using namespace std;
int main()
{
    string s,s1;
    set<string>sz;
    while(getline(cin,s))
    {
       for(int i=0;s[i]!=0;i++)
       {
           if(!isalpha(s[i])) s[i]=' ';
           if(s[i]>='A'&&s[i]<='Z') s[i]+='a'-'A';
       }
       stringstream ss;
       ss.clear();
       ss.str(s);
       while(ss>>s1)
       {
           sz.insert(s1);
       }
    }
    for(set<string>::iterator it=sz.begin();it!=sz.end();it++)
        cout<<*it<<endl;
}

posted @ 2020-05-07 15:04  Joelin12  阅读(350)  评论(0)    收藏  举报