Для заданной символьной строки вывести на экран те символы, которые встречаются в ней только один раз - C (СИ)
Формулировка задачи:
Для заданной символьной строки вывести на экран те символы, которые встречаются в ней только один раз.
Решение задачи: «Для заданной символьной строки вывести на экран те символы, которые встречаются в ней только один раз»
textual
Листинг программы
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <iterator>
#include <map>
struct Random {
Random(int min_, int max_) : min(min_), max(max_) {}
int operator()() { return rand() % (max - min + 1) + min; }
int min, max;
};
int main(int argc, char *argv[]) {
srand(time(NULL));
std::string line;
std::generate_n(std::back_inserter(line), 25 + rand() % 5, Random('a', 'z'));
std::cout << "Line '" << line << "'" << std::endl;
std::map<char, int> counts;
for (std::string::const_iterator i = line.begin(); i != line.end(); ++i)
++counts[*i];
std::cout << "Letters, met once: ";
for (std::map<char, int>::const_iterator i = counts.begin();
i != counts.end(); ++i)
if (i->second == 1)
std::cout << i->first << " ";
}
Объяснение кода листинга программы
В этом коде:
- Структура
Randomиспользуется для генерации случайных чисел в заданном диапазоне. - В функции
mainсоздается строкаlineдлиной от 25 до 30 символов, выбираемых случайным образом из диапазона от 'a' до 'z'. - Создается
mapcounts, в котором ключами являются символы из строкиline, а значениями - количество их вхождений в строку. - В цикле происходит перебор всех символов строки
lineи увеличение соответствующего значения вmapcounts. - Выводится на экран список символов, встречающихся в строке только один раз.