Расшифровка азбуки Морзе с помощью strtok в двоичном дереве - вывод мусора

Я был в состоянии закодировать английский для азбуки Морзе, но у меня возникли проблемы с выполнением обратной операции. Вот что у меня так далеко:

В основном():

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

1 ответ

Казалось бы, проблема в том, что пока вы передаете std::string в tree.Decodeпотом звонит SearchAndReturn с той же переменной, как если бы это был один char, Ваш вопрос не содержит минимального, полного и проверяемого примера, поэтому трудно понять, какой из них правильный, но, по крайней мере, один - нет.

Другие вопросы по тегам