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;
} 
01-08 03:19