2012-04-04 1 views
1

Я пытаюсь выполнить некоторые операции над массивом, конечной целью которого является простое шифрование. Но в любом случае мой массив имеет длину 458 символов, состоящий в основном из букв и некоторых запятых, периодов и т. Д. Я пытаюсь начать с последнего символа массива и перейти к первому символу и заглавными буквами в массиве. Он читает последний символ «» правильно, но затем следующий шаг цикла for равен 4 символам и пропускает несколько букв. Что-то не так с моей логикой управления?loop logic, encrypting array C++

void EncryptMessage (ofstream& outFile, char charArray[], int length) 
{ 
    int index; 
    char upperCased; 
    char current; 

    for (index = length-1; index <= length; --index) 
    { 
     if (charArray[index] >= 'A' && charArray[index] <= 'Z') 
     { 
      upperCased = static_cast<char>(charArray[index]); 
      current = upperCased; 
      outFile << current; 
     } 
     else 
     { 
      charArray[index]++; 
      current = charArray[index]; 
     } 

    } 
} 

ответ

2

Изменение:

for (index = length-1; index <= length; --index) 

к:

for (index = length-1; index >= 0; --index) 
+0

это работает, но я получаю действительно странный вывод, который находится в случайном порядке, и ни одна из букв не является верхним – user1193717

+0

, неважно, проблема была в инструкции else, где снова был ненужный приращение индекса. отлично работает сейчас – user1193717

+1

Хотите ли вы изменить строчные буквы только заглавными буквами? – hmjd

1

В else ноге вашего if заявления, вы не устанавливая значение current, но никогда не писать его, так что все, что получает выписал то, что начинаются как заглавные буквы (и, как уже отмечалось out, ваше условие цикла неверно).

Если бы я делал это, я бы его немного по-другому. Я бы написать небольшой функтор для шифрования одного письма:

struct encrypt { 
    char operator()(char input) { 
     if (isupper(input)) 
      return input; 
     else 
      return input+1; 
    } 
}; 

Тогда я положил ввод в std::string, и работать на нем с помощью std::transform:

std::string msg("content of string goes here."); 

std::transform(msg.rbegin(), msg.rend(), 
       std::ostream_iterator<char>(outFile, ""), 
       encrypt());