我的链表有问题。我写了一个函数想把一个句子分成单词。就像我有句“我爱你”,它分为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;
}
答案 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;
}