-2

私の文字列input1234567890の場合、次のことを行います。

(strcmp(input,"0"))

私の文字配列に1a がある場合は返され、ない場合は 0 になりますか?01234567890

私はこれをテストできることを知っています。私はそうしました。答えはイエスですが、理由がわからず、strcmpの絶対的な詳細を見つけることができません。

4

4 に答える 4

0

No.strcmpは、2つの文字列が同じ場合は0を返し、それ以外の場合は0を返しません。あなたはグーグルさえ気にしなかったようです!

于 2013-02-26T02:05:47.107 に答える
0

いいえ、2つの文字列を比較します。

strcmp()両方の文字列が同じ場合にのみ0を返します。それ以外の場合、戻り値は最初の一致しない文字について何かを示します。

あなたの場合、これは「1」と「0」の比較と関係があります。他の文字列の最後に「0」が付いていても違いはありません。

于 2013-02-26T02:06:11.393 に答える
0

strcmp()通常、最初の文字から最後の文字まで、または 2 つの文字列に不一致が生じるまで、すべての文字をチェックします。

の正確な内部実装strcmp()について質問している場合、言語標準では指定されていません。理論的には、2 つの文字列の長さを検出し、それらが等しい場合は、より大きい単位を使用して文字列を比較charし、逆方向に比較することもできます。

strcmp()文字列を比較しますが、一方を他方で検索するのではありません。文字列が同一の場合は 0 を返します。それ以外の場合は、最初に一致しない文字間の差の符号を表す正ま​​たは負の値を返します (文字の値は符号なしとして扱われます)。

于 2013-02-26T02:12:45.710 に答える
0

2 番目のパラメーターが「0」の場合、C++ の strcmp は文字列内のすべての値をチェックしますか</p>

いいえ、そうではありませんstrcmp()。ある文字列が別の文字列と等しいかどうかをチェックする文字列比較関数です。その場合0、一方の文字列が他方の文字列より通常大きい場合に戻り、そうでない場合1に戻り-1ます。

存在するかどうかを確認するに、独自の関数を作成することをお勧めします。

//return 1 if if the character exists, 0 otherwise
int DoesCharExist(const char *pData, char character)
{
   char *data = pData;
   while(*data++){
     if(*data == character) return 1;
   } 
   return 0;
}
于 2013-02-26T02:13:12.327 に答える