UVa - 156 Ananagrams(STL)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19294
#include <iostream> #include <algorithm> #include <string> #include <vector> #include <map> using namespace std; /*************************************************************************************************************** 题意:找出不能通过字母重重排的单词,按字典序输出(came 和 mace 属于重排单词,不能输出) 思路: 1,熟悉STL的用法 2,压栈用原字符串,处理用小写单词,输出原串 ***************************************************************************************************************/ vector <string> words; map <string,int> cnt; string fuc(string s) { string ans=s; for(int i = 0;i < ans.length();i ++) if(isalpha(ans[i])) //判断是否为小写字母,返回0是非小写字母,否则是 ans[i]=tolower(ans[i]); //将小写字母转换成大写字母 sort(ans.begin(),ans.end()); return ans; } int main() { string s; while(cin>>s,s != "#") { words.push_back(s); string temp=fuc(s); if(!cnt.count(temp)) cnt[temp]=0; cnt[temp]++; } vector <string> ans; for(int i = 0;i < words.size();i ++) if(cnt[fuc(words[i])] == 1) ans.push_back(words[i]); sort(ans.begin(),ans.end()); for(int i = 0;i < ans.size();i ++) cout<<ans[i]<<endl; return 0; }