私はCでstrcmp()
について学んでいます。2つの文字列が等しい場合、strcmp
は0を返します。
ただし、最初の文字列が2番目の文字列よりも小さいときにstrcmp
が0未満を返すとマニュアルページに記載されている場合、長さ、ASCII値、または他の何か) ?
この意味で、文字列の「より小さい」とは、辞書式(アルファベット順)の順序を意味します。
cat
はアルファベット順でdog
の前にあるため、cat
はdog
よりも小さくなります。
辞書の順序は、ある意味では、アルファベット順をすべてのASCII(およびUNICODE)文字に拡張したものです。
ゼロより大きい値は、最初の文字列で一致しない最初の文字の値が2番目の文字列よりも大きいことを示し、ゼロより小さい値はその反対を示します。
C99 7.21.4:
比較関数によって返されるゼロ以外の値の符号memcmp、strcmp、およびstrncmpは、比較されるオブジェクトで異なる文字の最初のペア(両方ともunsigned charと解釈される)の値の差の符号によって決定されます。
特に、結果は現在のロケールに依存しないことに注意してください。 _LC_COLLATE
_(C99 7.11を参照)はstrcoll()
およびstrxfrm()
に影響しますが、strcmp()
には影響しません。
int strcmp (const char * s1, const char * s2)
{
for(; *s1 == *s2; ++s1, ++s2)
if(*s1 == 0)
return 0;
return *(unsigned char *)s1 < *(unsigned char *)s2 ? -1 : 1;
}