Я был в состоянии закодировать английский для азбуки Морзе, но у меня возникли проблемы с выполнением обратной операции. Вот что у меня так далеко:
В основном():
cout << "Enter your Morse code, separated by /, ended by *: ";
cin.getline(morseCode, 100, '*');
char* token = strtok(morseCode, "/");
while(token != NULL)
{
cout << endl << "Decoding: " << token << endl;
string newCode = token;
t.Decode(newCode);
token = strtok(NULL, "/");
}
Функция декодирования:
void Decode(string x)
{
Node* r = SearchAndReturnString(root, x);
if(r->code == x) cout << r->letter;
else cout << r->code << " with x being " << x << endl; cout << "Error.";
}
Мой вывод представляет собой набор случайных данных мусора, а затем программа вылетает. Я знаю, что это как-то связано с SearchAndReturnString
функции, но я не могу понять, что еще с этим делать.
Структура узла:
struct Node
{
string letter;
string code;
Node *left;
Node *right;
};
Функция SearchAndReturn:
Node* SearchAndReturnString(Node *r, string x)
{
if(r != NULL)
{
if(r->code == x) {cout << r->code << " matches " << x << endl; return r;}
else if(r->code > x) {SearchAndReturnString(r->left, x);}
else {SearchAndReturnString(r->right, x);}
}
else return NULL;
}
Вот весь код в соответствии с просьбой:
Заголовок: http://pastebin.com/QyaakvMK
Главный: http://pastebin.com/NcseqrbX
Казалось бы, проблема в том, что пока вы передаете std::string
в tree.Decode
потом звонит SearchAndReturn
с той же переменной, как если бы это был один char
, Ваш вопрос не содержит Минимальный, полный и проверяемый пример поэтому трудно понять, что является правильным, но по крайней мере одно не так.