Я пишу приложение на С++ для поиска слов в большой базе данных текстов песен. для начала я беру каждое слово и помещаю его в структуру Word, которая выглядит так:
struct Word{
char* clean;
int size;
int position;
SongId id;
Word* same;
Word* diff;
};
У меня есть функция makeNode, которая делает следующее:
- вникает в каждое слово
- создает новую структуру Word и добавляет в нее слово
- создает узел с именем Word*, который указывает на новое слово
- сохраняет указатель в хеш-таблице.
В моей функции makeNode я установил для node->clean свое «чистое» слово. Я могу напечатать слово, выбрав node->clean. Но когда я устанавливаю для node->same значение NULL, я теряю node->clean. Я не теряю node-> position или node-> size. Если я удалю строку, в которой я присваиваю 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;
}
cleanse
? Функция? Выложи его код. Возвращает ли он локальный массив символов? - person Nawaz   schedule 01.05.2011