uva156反片语

来源:互联网 发布:洪恩软件开天辟地下载 编辑:程序博客网 时间:2024/05/21 20:24

题目大意:找出所有满足以下条件的单词:该单词不能通过字母重排得到输入文本中的另外一个单词。(即将单词字典序排序后不能在输入文本中找到第二个一样的单词) 在判断是否满足条件时不分大小写,但在输出时应保留输入的大小写,并把结果按字典序排列(所有大写字母在小写字母前面)。
题目链接–

#include<iostream>#include<set>#include <cstdio>#include <cstdlib>#include <cstring>#include <map>#include <vector>#include <cmath>#include <algorithm>using namespace std;map<string,int>cnt;vector<string>ans;string re(string x)//此函数是将字符串全变为小写后进行字典序排序{    int xlen=x.length();    for(int i=0;i<xlen;i++)        x[i]=tolower(x[i]);    sort(x.begin(),x.end());    return x;}int main(){    string s;    while(cin>>s)    {        if(s[0]=='#') break;        ans.push_back(s);        string r=re(s);        if(!cnt.count(r)) cnt[r]=0;        cnt[r]++;    }    vector<string>word;    for(int i=0;i<ans.size();i++)    {        if(cnt[re(ans[i])]==1)            word.push_back(ans[i]);    }    sort(word.begin(),word.end());    for(int i=0;i<word.size();i++)        cout<<word[i]<<endl;    return 0;}

ps:此题用到stl中的map,map像是一个数组的高级版。
插入:push_back()
求数组长度:size()
求数组中第一个元素:begin()
求数组中最后一个元素:end()

原创粉丝点击