在C++中拆分带有链表的单词



我对链表有问题。我写了一个函数,想要将一个句子拆分成单词。就像我有一句"我爱你",它分成了"我"、"爱"、"你"三个字。我有指向句子第一个字母的头部指针。该函数将返回一个数组,其中包含每个单词的头部指针。

它工作正常只有一个问题。如果一个单词只有一个字母。它将与第二个词结合。就像"我爱你"一样,它会给出"我爱"和"爱"、"你"这样的词。

我想了很久,其他功能运行良好。我认为问题出在 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;
}

相关内容

  • 没有找到相关文章

最新更新