Я написал функцию, которая ищет символ в массиве, и если найдено, возвращает его преемник, иначе возвращает -1. Затем, если слово заканчивается гласной, алгоритм добавляет согласную, и наоборот.
Этот код хорошо работает, даже с последним словом файла:
changedChar = cipherChar(character, consonants, tConsonants);
if (changedChar != -1) charType = 'c';
else {
changedChar = cipherChar(character, CONSONANTS, tConsonants);
if (changedChar != -1) charType = 'c';
else {
changedChar = cipherChar(character, vowels, tVowels);
if (changedChar != -1) charType = 'v';
else {
changedChar = cipherChar(character, VOWELS, tVowels);
if (changedChar != -1) charType = 'v';
else {
changedChar = cipherChar(character, others, tOthers);
if (changedChar != -1) charType = 'o';
else {
changedChar = changeDigit(character);
if (changedChar != -1) charType = 'o';
else {
changedChar = cipherChar(character, punctuation, tPunctuation);
if (changedChar != -1) charType = 'o';
}
}
}
}
}
}
if (changedChar != -1) outFile << changedChar;
if (searchChar(inFile.peek(), punctuation, tPunctuation) > -1)
if (charType == 'v') {
outFile << consonants[nVowel];
nVowel < 4 ? nVowel++ : nVowel = 0;
}
else if (charType == 'c') {
outFile << vowels[nConsonant];
nConsonant < 20 ? nConsonant++ : nConsonant = 0;
}
Но этот другой не добавляет лишнюю букву после последнего слова файла:
charType = 'c';
changedChar = cipherChar(character, consonants, tConsonants);
if (changedChar == -1) {
changedChar = cipherChar(character, CONSONANTS, tConsonants);
if (changedChar == -1) {
charType = 'v';
changedChar = cipherChar(character, vowels, tVowels);
if (changedChar == -1) {
changedChar = cipherChar(character, VOWELS, tVowels);
if (changedChar == -1) {
charType = 'o';
changedChar = cipherChar(character, others, tOthers);
if (changedChar == -1) {
changedChar = changeDigit(character);
if (changedChar == -1) changedChar = cipherChar(character, punctuation, tPunctuation);
}
}
}
}
}
if (changedChar != -1) outFile << changedChar;
if (searchChar(inFile.peek(), punctuation, tPunctuation) > -1)
if (charType == 'v') {
outFile << consonants[nVowel];
nVowel < 4 ? nVowel++ : nVowel = 0;
}
else if (charType == 'c') {
outFile << vowels[nConsonant];
nConsonant < 20 ? nConsonant++ : nConsonant = 0;
}
Почему? Я действительно запутался.