UVa 156 Ananagrams

题意:给出一些单词,在这些单词里面找出不能通过字母重排得到的单词(判断的时候不用管大小写),然后按照字典序输出。

学习的紫书的map= =

将每一个单词标准化 先都转化为小写,再排序(即满足了题目中说的不能通过字母重排这个条件) 然后记录出现次数,将出现次数为1的储存再输出

 

话说这一题的标准化要好好学学= =(字母重排用排序来做= =)

 1 #include<iostream>  

 2 #include<cstdio>  

 3 #include<cstring> 

 4 #include<vector> 

 5 #include<algorithm> 

 6 #include<cctype> 

 7 #include<set>

 8 #include<map>

 9 using namespace std;

10 

11 map<string,int> cnt;

12 vector<string> words;

13 vector<string> ans;

14 

15 string repr(const string& s)

16 {

17     string ans=s;

18     for(int i=0;i<ans.length();i++)

19     ans[i]=tolower(ans[i]);

20     sort(ans.begin(),ans.end());

21     return ans;

22 }

23 

24 int main()

25 {

26     string s;

27     while(cin>>s)

28     {

29         if(s[0]=='#') break;

30         words.push_back(s);

31         string r=repr(s);

32         if(!cnt.count(r)) cnt[r]=0;

33         cnt[r]++;

34     }

35     for(int i=0;i<words.size();i++)

36         if(cnt[repr(words[i])]==1) ans.push_back(words[i]);

37         

38         sort(ans.begin(),ans.end());

39         for(int i=0;i<ans.size();i++)

40         cout<<ans[i]<<"\n";

41     return  0;

42 }
View Code

 

你可能感兴趣的:(uva)