Страница 1 из 1

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

Добавлено: 27 мар 2005, 19:33
qwertyuiop
Нужно вывести таблицу,в которой будет так: символ "такой то" встречается "n" раз,следуящая строка - другой символ,ну ,вобщем ясно наверное...
Подскажите плиз саму идеологию,т.е. с чего начать,какими методами,и чем закончить??? Что использовать???

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

После этого пробегаешь по своему массиву (по желанию его можно отсортировать) и выводишь пару "ключ - значение".

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

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

int nRes[256] = {0};

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

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

nRes['N'] = X;

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

Добавлено: 28 мар 2005, 11:57
melkiy

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

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

}