题目大意:给你一些单词,忽略大小写,忽略单词内部的排列顺序,找出那些只出现一次的单词,按字典序输出。例如: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;
}