Подсчитать количество повторений элементов, заданного множества символов, во введенной строке.
Суть задачи такова, вводим строку символов, после чего подсчитываем количество повторений каждого символа в строке. Таким образом количество повторений любого символа будет равно как минимум единице. Например, если строка состоит из 10 различных символов, значит в выводе программы должно быть 10 чисел. каждое из которых характеризует количество вхождений данного символа в строку.
Этот исходник нам прислал пользователь нашего сайта Иван Погорелый, большое спасибо ему за это. Причем программа использует 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;
}
Для сравнения, попробуйте реализовать данную программу, используя встроенные средства языка С++. Уверен, что кода у вас получится в несколько раз больше. Смотрим пример работы программы к этому исходному коду.
Из примера видно, что во введенной строке нашлось два символа h и два символа i, остальных символов — по одному. Насколько мы можем судить, данный вывод похож на правду.
CppStudio.com
Ввести строку: Nightwish N 1 g 1 h 2 i 2 s 1 t 1 w 1
Комментарии
vlad bolltrukanis
#include <iostream> #include <cstring> #include <string> #include <map>i nt main() { std::map <char, int> Mp; char p[250]; std::cin.getline(p, 250); auto jt = Mp.begin(); auto k = Mp.end(); for (int i = 0; p[i] != ''; i++) { bool check = 0; for (auto it = Mp.begin(); it != k; it++) { if (it->first == p[i]) { it->second += 1; check = 1; }; }; if (check == 0) { Mp.insert(std::pair<char, int>(p[i], 1)); }; }; for (auto it = Mp.begin(); it != Mp.end(); it++) { if(it->second) std::cout << it->first << ": " << it->second << std::endl; }; system("pause"); return 0; }