基于键值对映射map统计一段英文中的26个字母出现的次数,注意区分大小写。
相关知识
为了完成本关任务,你需要掌握:1.解题思路。
解题思路
设计一个map:键为字符类型,值为整形类型,并让初始值为0。遍历英文中出现的字符,只要是字母就做为键插入map,并让值加1,最后遍历输出结果。
编程要求
本关的编程任务是补全右侧代码片段main中Begin至End中间的代码,具体要求如下:
创建一个空的键值对映射mp:map<char, int> mp;
读取和处理数据,一行英文句子,长度不超过100;
遍历键值对映射mp,严格按照输出格式打印结果;
清空键值对映射mp。
测试说明
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是平台的测试样例:
测试输入:
The world is but a little place, after all.
预期输出:
print map: 17
T 1
a 4
b 1
c 1
d 1
e 4
f 1
h 1
i 2
l 6
o 1
p 1
r 2
s 1
t 4
u 1
w 1
0
输入格式:
一行英文
输出格式:
print map: N,其中N是map的大小
遍历输出N行,map中的键和值:key map[key]
非学员输出0,用于检测map清空
补全右侧代码,你右侧代码发一下啊
参考代码如下:
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
//保存字符串
string str;
//getline属于string的类型,需要引入<string>,而cin.getline属于istream类型,x
getline(cin, str);
//1.建设映射公式,例如每个字母出现的次数,‘a" -> 4
map<char, int> mp;
//遍历字符串,统计字母或者数字的个数
for (int i = 0; i < str.length(); i++)
{
if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))
mp[str[i]]++;
}
cout << "print map: " << mp.size() << endl;
//遍历迭代器,输出每个字符出现的次数
for (map<char, int>::iterator iter = mp.begin(); iter != mp.end(); ++iter) {
cout << iter->first << " " << iter->second << endl;
}
mp.clear();
cout << mp.size() << endl;
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
#include <iostream>
#include <map>
using namespace std;
int main()
{
string line;
getline(cin, line);
map<char, int> mp;
for (auto c : line)
if (isalpha(c))
mp[c]++;
cout << "print map: " << mp.size() << '\n';
for (auto [key, value] : mp)
cout << key << ' ' << value << '\n';
mp.clear();
cout << mp.size() << '\n';
return 0;
}
$ g++ -Wall -std=c++17 main.cpp
$ ./a.out
The world is but a little place, after all.
print map: 17
T 1
a 4
b 1
c 1
d 1
e 4
f 1
h 1
i 2
l 6
o 1
p 1
r 2
s 1
t 4
u 1
w 1
0
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!