📜  门|门 IT 2006 |第 55 题(1)

📅  最后修改于: 2023-12-03 15:42:21.694000             🧑  作者: Mango

门|门IT 2006 | 第55题

这是一道经典的编程题,适合考验程序员的基本能力和算法思维。

题目描述

有一段英文短文,请编写一个程序,统计其中每个字母出现的次数,并按照字母表顺序输出结果,如果字母没有出现过,则不输出。

输入格式

输入的数据为一段英文短文,其中可能包含空格、标点符号和大小写不同的字母。

输出格式

输出每个字母在短文中出现的次数,按照字母表顺序输出,如果字母没有出现过,则不输出。

输出格式如下:

a:10
b:5
c:3
...
样例输入
This is a sample text with several words in it.
样例输出
a:2
c:1
d:1
e:7
f:1
h:1
i:4
l:2
m:1
n:2
p:1
r:2
s:3
t:6
v:1
w:2
x:1
解题思路

可以使用哈希表来统计每个字母出现的次数,然后按照字母表顺序输出结果。

具体步骤如下:

  1. 读入短文并转换为小写。
  2. 遍历短文中的每个字符,如果是字母,则在哈希表中增加该字母的计数器(如果该字母不在哈希表中,则先将其插入哈希表)。
  3. 将哈希表中的数据按照字母表顺序排序,并输出结果。
代码实现(Python)
from collections import defaultdict

text = input().lower()
counter = defaultdict(int)

for c in text:
    if c.isalpha():
        counter[c] += 1

for c in sorted(counter.keys()):
    print(c + ":" + str(counter[c]))
代码实现(C++)
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;

int main() {
    string text;
    getline(cin, text);

    map<char, int> counter;

    for (char c : text) {
        if (isalpha(c)) {
            c = tolower(c);
            counter[c]++;
        }
    }

    for (char c = 'a'; c <= 'z'; c++) {
        if (counter[c] > 0) {
            cout << c << ":" << counter[c] << endl;
        }
    }

    return 0;
}
总结

此题考察了程序员的字符串处理和数据结构处理能力,需要掌握哈希表和字母表的相关知识。同时,需要注意边界处理,如字符大小写转换、字母表范围限制等。