Разделить слова со связанным списком в C ++

0

У меня проблема со связанным списком. Я написал функцию, которая хочет разбить предложение на слова. Как будто у меня есть предложение "Я тебя люблю", и оно делится на 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;
}
Теги:
arrays
pointers
linked-list

1 ответ

0
Лучший ответ

Вы неправильно обрабатываете первую букву слова. Этот 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;
}
  • 0
    Огромное спасибо. Я все еще изучаю указатель, и я забыл эту проблему. Спасибо за помощь!!!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню