У меня проблема со связанным списком. Я написал функцию, которая хочет разбить предложение на слова. Как будто у меня есть предложение "Я тебя люблю", и оно делится на 3 слова "Я", "Любовь", "ты". У меня есть указатель на первую букву предложения. И функция вернет массив со всеми словами "главные указатели".
Он работает нормально, есть только одна проблема. Если у одного слова есть только одна буква. Он будет сочетаться со вторым словом. Подобно "Я люблю тебя", это даст слова "Я люблю" и "люблю", "ты".
Я долго думал, и другие функции работают хорошо. Я думаю, что проблема в цикле for, может ли кто-нибудь помочь?
Node* SplitToWords(Node* cursor){
int i=CountWords(cursor);
Node* array=new Node[i];
Node* t;
t=cursor;
for (int j=0; j<i-1; j++) {
array[j]=*t;
t=t->link;
while (t->data!=' ') {
cursor=t;
t=t->link;
}
t=t->link;
cursor->link=NULL;
}
array[i-1]=*t;
return array;
}
Вы неправильно обрабатываете первую букву слова. Этот array[j]=*t;
копировать узел в массив. И в конце cursor->link=NULL;
не вносит никаких изменений в эту копию, если вы долго произносите одну букву.
Чтобы исправить это, вы можете вспомнить первый узел и вставить его в массив в конце цикла for
for (int j=0; j<i-1; j++) {
Node *first_letter = t;
t=t->link;
while (t->data!=' ') {
cursor=t;
t=t->link;
}
t=t->link;
cursor->link=NULL;
array[j]=*first_letter;
}