Ведение подсчета символов в массивах

Я работаю над программой Caesar Cipher для задания, и у меня есть общее понимание, но моя функция определения ключа расшифровки неоправданно длинная и грязная.

while(inFile().peek != EOF){
inFile.get(character);
if (character = 'a'|| 'A')
{ aCount++; }
else if (character = 'b' || 'B')
{ bCount++; }

и так далее.

Каким образом, если это возможно, я могу превратить это в массив?

0

Решение

Вы можете использовать следующий код:

int count [26] = {0};
while(inFile().peek != EOF){
inFile.get(character);
if (int (character) >=65 || int (character) <=90)
{ count [(int (character)) - 65] ++; }
else if (int (character) >=97 || int (character) <=122)
{ count [(int (character)) - 97] ++; }
}

Постскриптум Это проверяет значение ASCII каждого символа, а затем увеличивает его соответствующий элемент в массиве всех символов, имея индекс 0 для A / a и 1 для B / b и так далее.
Надеюсь это поможет…


Постскриптум — В вашем коде произошла ошибка, = является оператором присваивания и == является условным оператором, и вы не назначаете значение в if Скажите, вы проверяете состояние … Так что всегда используйте == проверить на равенство

0

Другие решения

Вы можете использовать массив следующим образом

int letterCount['z'] = {0}; //z is the highest letter in the uppercase/lowercase alphabetwhile(inFile().peek != EOF){

inFile.get(character);
if (character > 'A' && character < 'z')
letterCount[character]++;

}

Вы также можете использовать хэш-карту, как это

#include <unordered_map>

std::unordered_map<char,int> charMap;

while(inFile().peek != EOF){

inFile.get(character);
if (charMap.find(character) == charMap.end())
charMap[character] = 1;
else
charMap[character] = charMap[character] + 1;

}

Если вы не знаете, HashMap функционирует как массив, где индексом может быть любой класс, который вам нравится, если он реализует хеш-функцию.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector