Множества символов в строке

Уровень сложности:

Подсчитать количество повторений элементов, заданного множества символов, во введенной строке.

Суть задачи такова, вводим строку символов, после чего подсчитываем количество повторений каждого символа в строке. Таким образом количество повторений любого символа будет равно как минимум единице. Например, если строка состоит из 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
Следующие статьи помогут вам в решении данной задачи:
Автор: admin
Дата: 12.09.2012
Поделиться:

Комментарии

  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;
    }

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.