-4

このコードを作成して、単語辞書を作成しました。各単語は 1 つしか存在できません。一致する場合は、対応するカウンターがインクリメントされます。単語が辞書にある場合は、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);
.
.
.
}
4

1 に答える 1

0

最大の問題は、placeWord()内の単語への割り当てだと思います。厳密に言えば、すべての引数はCで値によって渡されます。参照による受け渡しをエミュレートするには、変数への参照をで渡し、関数で逆参照する必要があります。(つまり、&wordArrを渡し、words引数のタイプをstruct wordNode **に変更します。)次に、現在の単語を変数に格納できます。

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

}

リストの先頭にある値を実際に変更するには、次のようにする必要があります。

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

また、リンクリストの先頭を変更しない場合は、前のノードを追跡し、挿入するwordNodeの横にprevNode->を設定する必要があることに注意してください。リスト内の現在の要素を追跡するために使用している変数に割り当てるだけでは機能しません。

于 2012-07-15T03:51:25.740 に答える