用C ++中的链表分隔单词

时间:2013-10-16 00:43:29

标签: c++ arrays pointers linked-list

我的链表有问题。我写了一个函数想把一个句子分成单词。就像我有句“我爱你”,它分为3个词“我”,“爱”,“你”。我的头指针指向句子的第一个字母。该函数将返回一个数组,其中包含每个单词'head pointers。

它工作正常只有一个问题。如果一个单词只有一个字母。它将与第二个词结合起来。就像“我爱你”一样,它会把话语称为“我爱”,“爱”,“你”。

我已经思考了很长时间,其他功能也很好用。我认为问题出在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;
}

1 个答案:

答案 0 :(得分: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;
}