2012-07-15 100 views
-4

我做了这段代码来创建一个单词字典。每个单词只有一个可以存在;如果是这样,则相应的计数器递增。如果单词在字典中,则调用strcmp()方法并交换指针。再通过参考

我的问题是,当我的功能被称为它使用strcmp(),但每次我这样做,*wordArr根本没有被修改。所以每次运行代码时,它都会自动比较“”,任何一个字都会自动生成<。

难道有人指着我正确的方向吗?

void placeWord(struct wordNode *words,char *tempW) 
{ 
    int value; 

    if(uniqueWordCount==0) //HEAD 
    { 
     words = createNewWord(tempW); 
    } 

    else ///SEARCHING AND AMMEND 
    { 
     while(1) 
     { 
      value = strcmp(words->word,tempW); 
      if(value<0) 
      { 
       words =createNewWord(tempW); 
       (words-1)->next= words; 
       words->prev = (words-1); 
       break; 
      } 
      else if(value==0) 
      { 
       (words->howmany)++; 
       wordCount++; 
       break; 
      } 
     words=words->next; 
      if(words->next!=NULL) 
       break; 
     } 
    } 
} 
. 
. 
. 
. 
} 

int main(){ 
. 
. 
. struct wordNode *wordArr =(struct wordNode*)malloc(size * sizeof(struct wordNode)); 


    placeWord(wordArr,tempW); 
. 
. 
. 
} 
+0

它是但是这只是整个事情的1/10,但它的一半。如果是在java中,我会在6小时前完成。 – user1526400 2012-07-15 03:22:46

+0

我不明白你如何声明'createNewWord()',所以我不能确信它包含了它需要的东西。您可能想要包含该功能。你有没有尝试用调试器击中这个问题,并通过你的代码来查看你创建的字符串是否真的被创建?此外,作为形式,作业的问题应该包括作业标签。 – Makoto 2012-07-15 03:42:55

+0

很难告诉你确切的错误是什么,因为给出的代码不会编译。 – 2012-07-15 03:46:58

回答

0

我认为最大的问题是您在placeWord()中的单词分配。严格地说,所有参数都是通过C中的值传递的。为了模拟通过引用传递,你需要传递一个对你的变量的引用,并在你的函数中对它进行解引用。 (也就是说,传递& wordArr和改变你的话参数结构wordNode类型**。)然后就可以在当前的单词存储在一个变量:

void placeWord(struct wordNode **words, char *tempWord) { 
    struct wordNode *currWordNode = *words; 

} 

要在头实际更改值列表中,你必须这样做:

newHeadNode->next = *words; // If there was a previous head node. 
*words = newHeadNode; 

另外请注意,如果你不改变你的链表的头,你必须保持前一个节点的轨迹,并设置prevNode->在你插入的wordNode旁边。简单地分配给您用来跟踪列表中当前元素的变量是行不通的。