概述
反片语(Ananagrams,Uva 156)
输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。 (两个单词内的字母不能相同,题目提示可以通过字母排序来判断)
在判断是否满足条件时,字母不分大小写, (全部转化为大写或小写来判断)
但在输出时应保留输入中的大小写,按字典序进行排列(所有大写字母在所有小写字母的前面)(每个单词按字典进行排序,单词样式是出入单词的样式 ,用sort()排序) 。
用值来查是否有相同字母的单词 用到map函数
完整代码
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
map<string, int> cnt;
vector<string> words;
// 将单词s进行标准化 (小写化)
string repr(const string &s) { //函数定义要小心 const string &s 函数内不能修改传入的变量的值
string ans = s;
for (int i = 0; i < ans.length(); i++)
ans[i] = tolower(ans[i]);
sort(ans.begin(), ans.end());
return ans;
}
int main() {
string s;
while (cin >> s) {
if (s[0] == '#')
break; //输入结束
words.push_back(s); //将字符串s存入动态数组中
string r = repr(s); //r = 小写化 && 从小到大排序
if (!cnt.count(r)) //cnt.count(r) 如果cnt里有r键返回1没有返回0 就是bool类型
cnt[r] = 0; //先初始化为0
cnt[r]++;
}
//
vector<string> ans;
for (int i = 0; i < words.size(); ++i) //所有的单词都扫一边
if (cnt[repr(words[i])] == 1) // repr(words[i]) 小写排序后的单词在mapcnt里面对应的值为1 ,也就是文章里面就一个
ans.push_back(words[i]);
sort(ans.begin(), ans.end());
for (int i = 0; i < ans.size(); i++)
cout << ans[i] << "n";
return 0;
}
使用到map的映射作用 从键(key)到值(value)
最后
以上就是耍酷店员为你收集整理的反片语(Ananagrams,Uva 156) map的较深应用的全部内容,希望文章能够帮你解决反片语(Ananagrams,Uva 156) map的较深应用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复