Подсчитать количество повторений элементов, заданного множества символов, во введенной строке.
Суть задачи такова, вводим строку символов, после чего подсчитываем количество повторений каждого символа в строке. Таким образом количество повторений любого символа будет равно как минимум единице. Например, если строка состоит из 10 различных символов, значит в выводе программы должно быть 10 чисел. каждое из которых характеризует количество вхождений данного символа в строку.
Из примера видно, что во введенной строке нашлось два символа h и два символа i, остальных символов — по одному. Насколько мы можем судить, данный вывод похож на правду.
Решение:
Этот исходник нам прислал пользователь нашего сайта Иван Погорелый, большое спасибо ему за это. Причем программа использует STL контейнер map, это хороший пример использования контейнеров вместо обычных, стандартных средств языка С++.
#include<iostream>
using namespace std;
#include <map> // STL контейнер map
#include <cstdio>
#include <cstring>
int main()
{
setlocale(LC_ALL, "rus");
map <char,int> chars;// создаем контейнер
map <char,int>::iterator begin, at, end;
char str[500];
cout<<"Ввести строку:"<<endl;
gets(str);// вводим строку
for(unsigned int i = 0; i < strlen(str); i++){
chars[str[i]]++;// считаем каждый символ
}
begin = chars.begin();
end = chars.end();
for(at = begin; at != end; at++) {
cout << at-> first << '\t'<< at->second << endl; // выводим результат
}
return 0;
}
Для сравнения, попробуйте реализовать данную программу, используя встроенные средства языка С++. Уверен, что кода у вас получится в несколько раз больше. Смотрим пример работы программы к этому исходному коду.
Ввести строку:
Nightwish
N 1
g 1
h 2
i 2
s 1
t 1
w 1
Из примера видно, что во введенной строке нашлось два символа h и два символа i, остальных символов — по одному. Насколько мы можем судить, данный вывод похож на правду.