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;
}

posted on 2016-05-10 00:10  Jstyle  阅读(95)  评论(0编辑  收藏  举报

导航