2015-09-24 3 views
1

У меня возникли проблемы с созданием функции, которая шифрует слово, используя номер вращения, который вводит пользователь. Вот то, что я до сих пор:C++ шифрование с вращением

string encryptWord(string word, int num) 
{ 
    string newWord; 
    newWord = word; 
    for(int i = 0; i < word.length(); i++) 
    { 
     newWord[i] = tolower(word[i]); 
     if((word[i] >= 'a') && (word[i] <= 'z')) 
     { 
      newWord[i] = word[i] + (num % 26); 
      if(newWord[i] > 'z') 
      newWord[i] = newWord[i] - 26; 

     } 
    } 
    return newWord; 

} 

теперь мой главный, когда я проверить его с

cout << encryptWord("xyz", 6); 

выход я получаю: от

Аналогично, для дешифрования У меня есть

string decryptRotWord(string word, int num) 
{ 
    string newWord; 
    num = num % 26; 
    int index; 
    for(int i = 0; i < word[i]; i++) 
    { 
     newWord[i] = tolower(word[i]); 
     if(word[i] >= 'a' && word[i] <= 'z') 
     { 
      index = word[i] - num; 
      if(index < 'a') 
       index = index + 26; 
      newWord[i] = index; 
     } 
    } 
    return newWord; 

} 

Однако для этого один ничего не выводит, когда я тестирую

cout << decryptRotWord("vdds", 2); 
+0

' 'г' + 6> CHAR_MAX'. Ваша программа демонстрирует неопределенное поведение, посредством подписанного интегрального переполнения. –

+0

Вот почему я нахожу TDD быстрее для разработки кода с любой логикой в ​​нем. – cgarner

+0

EDIT ah, my bad :( – Zereges

ответ

0

В функции расшифровывать, я думаю, что у вас есть ошибка на конец цикла условие:

for(int i = 0; i < word[i]; i++)

Как и в функции шифровать, вы должны пройти по длине

for(int i = 0; i < word.length(); i++)

+0

Я изменил мою функцию дешифрования, чтобы закончить цикл через word.length(), но я все еще не получаю вывод. А что касается шифрования, что вы подразумеваете под повторением по длине? – user3508309

0

Когда ваша петля for поступает на письмо 'z', оно 'z' + 6. Но это выходит за пределы максимальной длины char (127). Из этого вы получаете неопределенное поведение.

Вы должны реализовать способ начать отсчет от 'a' всякий раз, когда вы проверяете, что шифрование выходит за пределы 'z'.

Для дешифрования же, как упоминалось ранее, вы хотите проверить:

i < word.length() 
Смежные вопросы