Я работаю над программой Caesar Cipher для задания, и у меня есть общее понимание, но моя функция определения ключа расшифровки неоправданно длинная и грязная.
while(inFile().peek != EOF){
inFile.get(character);
if (character = 'a'|| 'A')
{ aCount++; }
else if (character = 'b' || 'B')
{ bCount++; }
и так далее.
Каким образом, если это возможно, я могу превратить это в массив?
Вы можете использовать следующий код:
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
Скажите, вы проверяете состояние … Так что всегда используйте ==
проверить на равенство…
Вы можете использовать массив следующим образом
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 функционирует как массив, где индексом может быть любой класс, который вам нравится, если он реализует хеш-функцию.