错误在哪里?显示字符串C++ Vignere密码
问题描述:
我正在尝试编程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;
}
答
res[i] = .......
是你的错误是。
您需要将它连接到字符串,因为它是空的并且没有任何内容。
所以每次运行res[0]
,res[1]
,res[2]
等,但在现实中,你的字符串的长度总是0
(这意味着它不具有任何索引)。
你应该使用:
res += .......
同样的问题是
nuevoConClave[i] = ....
这里,您将它声明:
string nuevoConClave;
,但从来没有修改它以任何方式,并期望nuevoConClave[i]
上班?
我希望这有助于!
答
修复:
res+= cuadrado[(int) nuevoConClave[i] - (int) 'A'][(int) texto[i] - (int) 'A'];
你应该在这里发表您的代码 – Oleksiy