STL模板之键值对容器实例:基于map统计26个字母出现频率

基于键值对映射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;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

#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
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632