2013-07-31 1 views
1

Это проблема, которую я пытаюсь решить:Подсчет символов в словах в C++ консольное приложение

Попросите пользователя ввести кучу слов, столько, сколько они хотят, пока они не войдут в 0. После , укажите, сколько раз каждая буква появляется на всех словах и распечатывает список каждой буквы и сколько раз она появляется. Пример:

Enter word> hello 
Enter word> lemon 
Enter word> goodbye 
Enter word> 0 
Letter: h appears 1 times 
letter: e appears 3 times 
... 

До сих пор я должен соединить все слова и сделать сравнения. Проблема заключается в том, что после того, как все слова собраны вместе, а 0 введен, я не могу считать каждый невидимый символ в объединенной строке. Я провел некоторое исследование, и я прочитал, что для этого вам нужны векторы, но я не понимаю, как их использовать.

Я пробовал в течение недели, чтобы все исправить, но безрезультатно. C++ отличается от всего другого языка, который я изучил (по крайней мере для меня).

+0

Некоторая идея: поддерживать массив/вектор размером 256 для 256 возможных символов (я принимаю ASCII), каждый раз, когда вы читаете новое слово, вы перебираете это слово, увеличивайте счетчик на соответствующие символы. – taocp

+0

Он должен изучить использование ассоциативного массива. Закаленная карта или неупорядоченная карта будут работать лучше, чем вектор/массив. –

ответ

3

Вы можете использовать std::unordered_map, с символами как ключ и счетчик в качестве значения. Для каждой прочитанной строки просто перебирайте ее и увеличивайте значение, соответствующее символу на карте.

Таким образом, на самом деле вам не нужно хранить слова.

+0

Только одна вещь о заполнении карты. Я чувствую, что OP будет заполнять его один за другим вручную. Просто перебирайте символы таблицы ascii (те, которые вам нужны) и заполняйте их таким образом :) – khajvah

+1

Он может предпочесть упорядоченную карту здесь, чтобы можно было легко манипулировать результатами, например, сортировать по частоте. –

+0

@PaulRenton Хорошая репутация. :) –

Смежные вопросы