0

2 つの char* 参照があり、どちらが少ないかを把握しようとしています。私が持っているコードは次のとおりです。

bool stringComparison::lessThan(char *s1, char* s2) {
  int result = strcmp(*s1,*s2);
  return result < 0;
};

結果はこれまで0未満ではありません。これを機能させるには、「int result」行をどのように変更する必要がありますか?

ありがとう

4

4 に答える 4

5

strcmp は文字列の比較に使用されます。*s1​​ と *s2 は文字です。s1 と s2 (星なし) で strcmp を呼び出す必要があります。

編集:

これがstrcmpのリファレンスです

于 2012-06-03T21:55:41.253 に答える
0

あなたが私たちに話したよりも多くの問題、または別の問題があります。

あなたが私たちに示したコードでは、s1s2パラメータは 型char*です。strcmp()関数は型の引数を期待します(char*実際にはconst char*)。

を呼び出す場合、それはタイプ の 2 つの引数を指定strcmp(*s1,*s2)して呼び出す試みです。あなたが説明したように、それはあなたに間違った結果を与えることはありません。コンパイルされません。少なくとも、コンパイラは型の不一致について不平を言っているはずです。strcmpchar

関数を宣言するヘッダーに#includefor<string.h>またはがない場合、コンパイラが不一致を認識しない可能性がありますが、宣言されていない関数の呼び出しは C++ では無効です。<cstring>strcmp

他の両方の回答が言うように、電話をかける必要があるのは事実ですが、それはあなたが説明している症状を説明していませんstrcmp(s1, s2)strcmp(*s1, *s2)への呼び出しを修正してstrcmp()も、それ自体で発生しているすべての問題が修正されるわけではありません。

いくつかの可能な説明を考えることができます:

  1. 宣言されていない関数の呼び出しについて文句を言わない古いコンパイラを使用しています。新しいコンパイラを入手するか、コンパイラを言語標準により厳密に準拠させるオプションを指定してコンパイラを呼び出します。

  2. コンパイラが警告を生成しており (診断は致命的である必要はありません)、それらを無視しています。警告を無視しないでください。

  3. 何らかの理由で、関数の独自の宣言を追加することにしました。strcmp()おそらくint strcmp(char s1, char s2);. そうしないでください。標準関数の宣言が必要な場合は#include、適切なヘッダーのディレクティブを追加します。

于 2012-06-03T22:36:26.237 に答える
0

s1そしてs2文字列です。だからあなたのコード

int result = strcmp(*s1,*s2);

読むべき

int result = strcmp(s1,s2);

のオンライン リファレンスを参照してくださいstrcmp

于 2012-06-03T22:10:07.350 に答える
0

あなたの機能の(おそらく)改善されたバージョンを提案できますか?これにより、 への呼び出しが修正されstrcmp、不要なresult変数が削除され、const-correctness が追加されます。

bool stringComparison::lessThan(const char *s1, const char *s2)
{
    return strcmp(s1, s2) < 0;
}

がクラスの場合、関数定義の最後にstringComparison別のクラスを追加します。const

于 2012-06-03T22:47:06.057 に答える