2015-08-28 44 views
1

我正在試圖製作一個Vigenere密碼。我的問題是我沒有得到預期的輸出。運行該程序時,它會提供以下輸出:HFNLP WPTLE。正確的輸出應該是:HFNLP YOSND。如何調試C中的Vigenere密碼?

我認爲問題在於modulo(mod)的使用不當。當我嘗試用變量i圍繞密鑰(ABC)時,plainText中的空格(「」)也會包裝,直接影響包裝的結果。爲了獲得正確的輸出,我不會做什麼。

string plainText = "HELLO WORLD"; 
string keyword = "ABC"; 

for(int i = 0; i < strlen(plainText);i++) 
{ 

    int wrap = (int) strlen(keyword) % (int) strlen(plainText); 

    if(isalpha(plainText[i])) 
    { 

    int upper = 'A' + (plainText[i] + (toupper(keyword[i % wrap]))) % 26; 
    printf("%c", upper); 

    } 
+0

提示:你需要額外的數據塊來做到這一點。迭代必須以某種方式知道到目前爲止遇到了多少空間。有幾種方法可以跟蹤這一點。 – spectras

+0

感謝您的幫助。 :) –

回答

3

非字母字符上的鍵索引不能增加。

修復的一個例子:

char *keyp = keyword; 
char ch; 
for(int i = 0; ch = plainText[i]; i++){ 
    if(isalpha(ch)){ 
     putchar('A' + (toupper(ch) - 'A' + toupper(*keyp++) - 'A') % 26); 
     if(!*keyp) 
      keyp = keyword; 
    } else 
     putchar(ch); 
} 
+0

非常感謝!它真的幫助了我。 :) –