Наверное, самый простой способ - это массив. Смотрите пример ниже. В этом примере я также обрабатываю край, в котором строка заканчивается символом, отличным от 0-9. В этом случае я считаю эти случаи; другие возможные решения игнорируют или генерируют ошибку.
#include <array>
#include <iostream>
#include <iomanip>
int main() {
std::array<int, 11> counts{0};
char end = '0';
if (end < '0' || end > '9') counts[10] += 1; else
counts[end - '0'] += 1;
for (int i = 0; i < 11; ++i) {
if (i == 10) std::cout << "Other: "; else
std::cout << std::setw(5) << i << ": ";
std::cout << counts[i] << "\n";
}
return 0;
}
Более гибкое решение - map
. Упрощает подсчет всех типов последних букв, но может также усложнить задачу, если вы заинтересованы только в подсчете символов 0-9.
#include <map>
#include <iostream>
#include <iomanip>
int main() {
std::map<char, int> counts;
char end = '0';
counts[end] += 1;
for (auto p = counts.begin(); p != counts.end(); ++p) {
std::cout << p->first << ": " << p->second << "\n";
}
return 0;
}