Если вы не хотите использовать wchar_t
для своих персонажей, вы слишком усложняете это.Вы можете обойтись без одного или двух массивов (два массива, только если вы хотите быстро и эффективно кодировать и декодировать; также можно делать все с одним массивом (аналогично тому, что вы пытались сделать), но это медленнее и большедорогое исполнение мудро).
Идея в том, чтобы сделать что-то вроде следующего.Вы должны быть в состоянии сделать это, не внося существенных изменений в существующий код (просто измените способ настройки и использования ваших массивов).
char encoder[256];
char decoder[256];
Теперь сгенерируйте свой словарь так, как вы это делаете,для каждого символа вы должны получить следующие две переменные, которые вы сохраните в этих массивах:
char from = 'a'; // the unencoded character
char to = 'x'; // the encoded character
// store them in the arrays for later use:
encoder[from] = to;
decoder[to] = from;
Вот и все!Для кодирования строки выполните следующие действия:
// these two could be pointers to buffers too
char my_string[] = "Hello World!";
char my_string_enc[256];
unsigned int p = 0;
while(my_string[p])
my_string_enc[p] = encoder[my_string[p++]];
my_string_enc[p] = '\0'; // null terminating the encoded string
Декодирование можно выполнить аналогичным образом:
// these two could be pointers to buffers too
char my_string_enc[] = "...";
char my_string[256];
unsigned int p = 0;
while(my_string_enc[p])
my_string[p] = decoder[my_string_enc[p++]];
my_string[p] = '\0'; // null terminating again