Как подсчитать колличество одинаковых символов в строке

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
qwertyuiop
Сообщения: 75
Зарегистрирован: 24 мар 2005, 11:00

27 мар 2005, 19:33

Нужно вывести таблицу,в которой будет так: символ "такой то" встречается "n" раз,следуящая строка - другой символ,ну ,вобщем ясно наверное...
Подскажите плиз саму идеологию,т.е. с чего начать,какими методами,и чем закончить??? Что использовать???
Yurich
Сообщения: 104
Зарегистрирован: 23 фев 2004, 19:07

27 мар 2005, 23:52

:) "Идеология" проста... Идешь простым циклом по строке. Считываешь очередной символ, занося его в массив (лучше всего std::map<char,int>) по след. правилу:
если такой символ уже присутствует в массиве, то просто инкриментируешь значение yourmap[yourchar], иначе заносишь его в массив с значение 1.

После этого пробегаешь по своему массиву (по желанию его можно отсортировать) и выводишь пару "ключ - значение".
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

28 мар 2005, 10:36

Если я правильно понял, то в каждой отдельно взятой строке нужно посчитать количество букв одного конкретного символа. Здесь ничего сложного нет. Каждый символ строки сравниваешь с заданным, если он соответствует заданному символу. то переменную-счётчик увеличиваешь на 1.
Если тебе нужно сделать сводную таблицу результатов, то использование map<char, int> в данном случае выглядит несколько громоздко. проще сделать так:

Задаёшь массив результатов с нулевыми значениями:

int nRes[256] = {0};

Потом в процессе работы каждый конкретный символ используешь в качестве индекса этого массива и присваиваешь данному элементу массива число этих символов в заданной строке.

Например, для символа 'N' количество X будет записано

nRes['N'] = X;

Потом циклом просматриваешь массив nRes и каждых элемент, который будет больше 0, выводишь в текст результата.
melkiy
Сообщения: 3
Зарегистрирован: 18 ноя 2004, 17:20
Контактная информация:

28 мар 2005, 11:57

Код: Выделить всё

#include <iostream> 
using namespace std; 

int main() 

{ 
	char str[1000];
	cout<<"Vvedite stroku:\n";
	cin >>str;
	cout<<endl;

	int chars[256]={0};

	for(int i=0; str[i]; i++)
		chars[str[i]]++;

	for(i=0;i<256;i++)
		if(chars[i])
			cout<<"symbol '"<<char(i)<<"' vstretilsja "<<chars[i]<<" raz"<<endl;

}
Ответить