Außerdem ist der Code voller Seltsamkeiten.
Code: Alles auswählen
int NUM_begin=0, NUM_end=0;
int b = 'a';
NUM_begin = b;
b = 'z';
NUM_end = b+1;
Dabei NUM_end wird in der ersten Funktion gar nicht verwendet.
Der Fehler liegt wahrscheinlich nicht (nur?) in der dekodierfunktion, sondern überall sonst.
Hier sind ein paar dinge die mir aufgefallen sind:
Code: Alles auswählen
static int begin=0;
static int count=0;
static int c = 0;
Code: Alles auswählen
if(n==0){
begin = NUM_begin;
}else{
begin = NUM_begin + count *2;
}
Code: Alles auswählen
int dif = ((int) 'a' - (int) 'A');
2. Diese Zahl ist negativ. Bist du sicher dass du nicht 'A' - 'a' schreiben wolltest?
Code: Alles auswählen
for(int n=0; n<=10; n++)
Code: Alles auswählen
for(int a=NUM_begin; a<=NUM_end; a++)
Ich kenne den Algorithmus nicht, und interessiere mich auch nicht sonderlich dafür, aber ich glaube da stimmt so einiges nicht.
Wieso hat denn encode() so ne "cap" geschichte, und decode() nicht? Beim dekodieren wird encodeTableTwo[][] gar nicht verwendet.
Hier ist übrigens eine von mir ausgebesserte Version, die zumindest mal das gleiche macht wie deine:
Code: Alles auswählen
using namespace std;
int encodeTable[20][26];
int encodeTableTwo[20][26];
void ImplementEncode()
{
int NUM_begin = 'a';
int dif = 'a' - 'A'; // 'A' - 'a'
int begin=0;
int count=0;
int c = 0;
for(int n=0; n<=10; n++)
{
if(n==0){
begin = NUM_begin;
}else{
begin = NUM_begin + count *2;
}
for(int g=0; g<=25; g++)
{
encodeTable[count][c] = begin;
encodeTableTwo[count][c] = begin-dif;
begin++;
c++;
}
c = 0;
count++;
}
}
string encode ( string text )
{
int NUM_begin = 'a', NUM_end = 'z' + 1;
int dif = 'a' - 'A';
for(std::size_t i=0; i< text.length(); i++){
int row=0,c=0;
bool cap=false;
for(int a=NUM_begin; a <= NUM_end; a++)
{
if( (int) text[i] == a )
{
row=c;
cap=false;
}else if( (int) text[i] == a-dif)
{
row=c;
cap=true;
}
c++;
}
if(!cap)
text[i] = (char) encodeTable[i+1][row];
else
text[i] = (char) (encodeTableTwo[i+1][row]);
}
return text;
}
string decode(string text)
{
int tmp=0;
for(std::size_t i=0; i<text.length(); i++)
{
for(std::size_t n=0; n<=25; n++)
{
if(text[i] == (char) encodeTable[tmp+1][n])
{
text[i] = (char) encodeTable[0][n];
}
}
if(tmp == 10)
tmp=0;
else
tmp=i;
tmp++;
}
return text;
}