UVA 156Ananagrams

来源:互联网 发布:pc群控手机源码 编辑:程序博客网 时间:2024/04/28 23:47

题目大意:给你一些单词,忽略大小写,忽略单词内部的排列顺序,找出那些只出现一次的单词,按字典序输出。例如:Abc,bca,CAB这些都算同一个单词。
既然忽略排列大小写和排列顺序,那么我们就把它们都变成小写好了;既然忽略排列顺序,就按从大大小排列好了。每读入一个单词,就处理一下,如上例中的单词就都变成了abc。这样就好做了。
处理好之后,就用map,把处理好的单词和原单词做一个对应。加入set,输出就好了。

#include<string>#include<map>#include<iostream>#include<algorithm>using namespace std;string s,s1;void msort(){    char ch;    for(int i = 0;i < s.length();i++) s[i] = tolower(s[i]);    for(int i = 0;i<s.length();i++){        for(int j = s.length() - 1;j > i;j--){            if (s[j] < s[j - 1]){                ch = s[j];                s[j] = s[j - 1];                s[j - 1] = ch;             }        }    }}int main(){    map<string,string> a;    map<string,int> b;    while(cin>>s,s[0] != '#'){        s1 = s;        msort();        b[s] ++;          a[s1] = s;    }    for(map<string,string>::iterator it = a.begin(); it != a.end();++it){        if (b[it->second] == 1)cout<<it->first<<endl;    }    return 0;} 
0 0