2012-07-15 112 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旁邊。簡單地分配給您用來跟蹤列表中當前元素的變量是行不通的。