uva156反片语
主要内容(reciting content):map,字符串
#include <cstdio>
#include <map>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int len;
map<string,int> mp;
char s[25];
string word[1005],now;
int main()
{
cin >> now;
while(now!="#"){ //输入
for(int i=0;i<now.size();i++){
s[i]=now[i];
if(s[i]>='a'&&s[i]<='z'){
s[i]=s[i]-'a'+'A';
}
}//s存了now的全大写形式
word[++len]=now; //
sort(s,s+now.size()); //将该单词按字典序排序
now=""; //字符串清空
for(int i=0;i<word[len].size();i++) now+=s[i];
if(mp.count(now)==0) //单词字典序排序 (0表示不存在,1表示存在
mp.insert(pair<string,int>(now,0));
mp[now]++;
cin>>now;
}
sort(word+1,word+1+len); //将所有单词按字典序排序
for(int i=1;i<=len;i++){
now = word[i];
for(int j = 0; j < now.size(); j++){
s[j] = now[j];
if(s[j] >= 'a' && s[j] <= 'z'){
s[j]=s[j]-'a'+'A';
}
}
sort(s,s+now.size());
now="";
for(int j=0;j<word[i].size();j++){
now+=s[j];
}
if(mp[now]==1){//如果只有它一个,那么就输出
cout<<word[i]<<endl;
}
}
return 0;
}