字典序单词

来源:互联网 发布:网页设计js特效 编辑:程序博客网 时间:2024/05/29 04:54

题意:输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本的另外一个单词。在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序进行排序。
思路:先输入单词,(利用vector),先把单词中的大写全部转化成小写,然后把单词中的每个字母都排序一遍,然后放进里进行统计。如果只出现一次就输出。
知识点:count方法:
统计map中某个键值出现的次数,因为map中键值唯一,所以此方法可以用来检测某键值是否存在,例如在删除时可以phone.count(name),若为0则可以提示用户此键值不存在,若为1则直接删除。Ps:erease无论要删除的键值对是否存在都能正常执行。

#include <iostream>#include <cstring>#include <cctype>#include <vector>#include <map>#include <algorithm>using namespace std;map<string,int> cnt;vector<string> words;string repr(const string& s) //把单词标准化,即大写变小写,排序{    string ans=s;  //借用第三方变量进行转换,使最终输出时还能保留大写部分。    for(int i=0;i<ans.length();i++) ans[i]=tolower(ans[i]); //ps:toupper()是将小写转大写    sort(ans.begin(),ans.end());    return ans;}int main(){    int n=0;string s;    while(cin>>s)    {        if(s[0]=='#') break;        words.push_back(s); //存入vector        string r=repr(s);        if(!cnt.count(r)) cnt[r]=0;        cnt[r]++;    }
1 0