Я пишу приложение на C ++ для поиска слов по большой базе данных песен.для начала я беру каждое слово и помещаю его в структуру Word, которая выглядит следующим образом:
struct Word{
char* clean;
int size;
int position;
SongId id;
Word* same;
Word* diff;
};
У меня есть функция "makeNode", которая выполняет следующие действия:
- принимает каждое слово
- создает новую структуру Word и добавляет к ней слово
- создает Word * вызываемый узел, который указывает на новое слово
- сохраняет указатель вхеш-таблица.
В моей функции makeNode я установил node-> clean для моего «чистого» слова.Я могу напечатать слово cout'ing node-> clean.Но когда я устанавливаю node-> same в NULL, я теряю node-> clean.Я не теряю узел-> положение или узел-> размер.Если я удаляю строку, в которой назначаю node-> same для NULL, я не теряю node-> clean.
char* clean = cleanse(word);
Word* node = new Word;
node->size = strlen(word);
node->clean = clean;
cout<<"MADE NODE FOR "<<node->clean<<endl;
node->position = position;
cout<<"4 node clean: "<<node->clean<<endl;
node->id = id;
cout<<"5 node clean: "<<node->clean<<endl;
node->same = NULL;
cout<<"6 node clean: "<<node->clean<<endl;
cout<<"node position: "<<node->position<<endl;
cout<<"node size: "<<node->size<<endl;
node->diff = NULL;
дает следующий вывод:
MADE NODE FOR again
4 node clean: again
5 node clean: again
6 node clean:
node position: 1739
node size: 6
0 node clean:
1 node clean:
3 node clean:
Может кто-нибудьпомочь мне пройти эту ошибку?Если вам нужна дополнительная информация, дайте мне знать.Заранее спасибо!
РЕДАКТИРОВАТЬ: вот функция очистки.
char* SongSearch::cleanse(char* dirty)
{
string clean;
int iter = 0;
while (!isalnum(dirty[iter]))
{
iter++;
}
while(dirty[iter]!='\0')
{
clean += dirty[iter];
iter++;
}
int backiter = clean.length() - 1;
while(!isalnum(clean[backiter]))
{
clean.erase(backiter, 1);
backiter--;
}
char c;
for (int i = 0; i<clean.length(); i++)
{
c = tolower(clean[i]);
clean[i] = c;
}
char* toReturn = (char*)(clean.c_str());
return toReturn;
}