2013-08-03 21 views
1

我正在嘗試編程Vignère密碼,但我遇到了文本加密問題。我已經完成了編寫字符串的功能,並且我認爲它已經完成了(我已經使用Eclipse對其進行了調試),但是我嘗試使用cout在屏幕上顯示它,並且沒有顯示任何內容。這是我的代碼:錯誤在哪裏?顯示字符串C++ Vignere密碼

#include<iostream> 
#include<string> 
using namespace std; 

const int MAX = 26; 
typedef char TCuadrado[MAX][MAX]; 

void CuadradoVigenre(TCuadrado& cuadrado); 
string CifrarMensaje(const TCuadrado& cuadrado, string clave, string texto); 

int main(){ 
    TCuadrado cuadrado; 
    CuadradoVigenre(cuadrado); 
    for (int i = 0; i < MAX; i++){ 
     for(int j = 0; j < MAX; j++){ 
      cout << cuadrado[i][j]; 
     } 
     cout << endl; 
    } 
    string res = CifrarMensaje(cuadrado, "VIGNERE", "CODIGO POLIALFABETICO"); 
    cout << res; 
    return 0; 
} 


void CuadradoVigenre(TCuadrado& cuadrado){ 
    int letra = 0; 
    for (int i = 0; i < MAX; i++){ 
     for(int j = 0; j < MAX; j++){ 
      cuadrado[i][j] = (char) letra + (int) 'A'; 
      letra++; 
      if(letra > 25) 
       letra = 0; 
     } 
     letra = i+1; 
    } 
} 

string CifrarMensaje(const TCuadrado& cuadrado, string clave, string texto){ 
    string res = ""; 
    string nuevoConClave; 
    int textoSize = texto.size(); 
    unsigned counterClave = 0; 
    for (int i = 0; i < textoSize; i++){ 
     if(texto[i] != ' '){ 
      nuevoConClave[i] = clave[counterClave]; 
      counterClave++; 
     }else{ 
      nuevoConClave[i] = ' '; 
     } 
     if(counterClave == clave.size()) 
      counterClave = 0; 
    } 

    for (int i = 0; i < textoSize;i++){ 
     if(texto[i] != ' ') 
      res[i] = cuadrado[(int) nuevoConClave[i] - (int) 'A'][(int) texto[i] - (int) 'A']; 
    } 
    return res; 
} 
+0

你應該在這裏發表您的代碼 – Oleksiy

回答

0
res[i] = ....... 

是你的錯誤是。

您需要將它連接到字符串,因爲它是空的並且沒有任何內容。

所以每次運行res[0]res[1]res[2]等,但在現實中,你的字符串的長度總是0(這意味着它不具有任何索引)。

你應該使用:

res += ....... 

同樣的問題是

nuevoConClave[i] = .... 

這裏,您將它聲明:

string nuevoConClave; 

,但從來沒有修改它以任何方式,並期望nuevoConClave[i]上班?

我希望這有助於!

0

修復:

res+= cuadrado[(int) nuevoConClave[i] - (int) 'A'][(int) texto[i] - (int) 'A'];