0

以下の引用で説明されている宿題の問題があります。これは私が実装しなければならない単純な関数です。オンラインで調べたところ、同様の実装を持つ関数が見つかりましたが、説明はありませんでした。

私のコードを評価するプログラムは、「wordCmp を使用すると失敗します」とだけ表示します。基本的に、これに別の方法でアプローチする方法についてのアドバイスはありますか? 採点者が非常に幅広い回答をしているだけなので、何が問題なのかわかりません.

int wordCmp (struct inode* n1, struct inode* n2)

2 つのノード内の文字列間の関係を示す整数を返します。ゼロより大きい値は、一致しない最初の文字が n2->word よりも n1->word の方が大きいことを示します。ゼロ未満の値はその反対を示しま​​す。strcmp を使用してこの関数を実装できます。

struct inode {
  char *word;
};

int wordCmp (struct inode* n1, struct inode* n2){
     return strcmp(n1->word, n2->word);
}
4

2 に答える 2

1

質問の作成者によるこの編集に基づいて、解決策は次のとおりです。

ノード内の単語の値に等しいポインターを作成し、それらを比較しました。正直なところ、私には同じように思えますが、なぜそれが機能したのかわかりません。

配付資料には、ノード フィールドに直接アクセスできないと記載されていました。理由がわからない...ので、次のコードを実装しただけなので、直接アクセスする必要はありませんでした。それはまったく同じことをします...

int wordCmp (struct inode* n1, struct inode* n2){

char* wordOne = nodeGetWord(n1);
char* wordTwo = nodeGetWord(n2);
return strcmp(wordOne, wordTwo);

}

nodeGetWord(struct lnode *node){
 return node->word;
}

それが私がしたすべてであり、うまくいきました...これがばかげているように見える場合は申し訳ありませんが、採点者が取ったものです。

于 2013-10-24T17:26:43.570 に答える
0

それらが等しいかどうかを確認しましたか?同じ文字列の場合、strcmp は 0 を返します。割り当てとして提示したものから、文字列が等しい場合を除いて、正しい比較があるように見えます。

文字列が同じかどうかを判断するロジックを追加し、並べ替えの選択に従う値を返します。

于 2013-10-13T01:13:17.640 に答える