如何使用 switch 语句查找数字中数字的频率?

How to find the frequency of digits in a number using a switch statement?

对于我的计算机科学大学介绍 class,我们必须编写一个程序来输出给定整数中数字的频率。例如,如果数字为 124243294,则输出为:

Number Frequency
1      1
2      3
3      1
4      2
9      1

必须使用switch语句来获取数字的频率。

你可以这样做:

int number;
std::cin >> number;

std::string s = std::to_string(number);
int freq[10] = {};

for(char ch : s)
{
    switch (ch)
    {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            freq[ch - '0']++;
            break;
    }
}

std::cout << "Number Frequency\n";
for(int i = 0; i < 10; ++i)
{
    if (freq[i] != 0)
        std::cout << std::setw(7) << std::left << i << freq[i] << "\n";
}

Demo

但是,为什么必须使用 switch?我会改用 std::(unordered_)map,例如:

int number;
std::cin >> number;

std::string s = std::to_string(number);
std::map<char, int> freq;

for(char ch : s) {
    freq[ch]++;
}

std::cout << "Number Frequency\n";
for(auto &elem : freq) {
    std::cout << std::setw(7) << std::left << elem.first << elem.second << "\n";
}

Demo