[C言語]文字列比較関数(strcmp)を自作

C言語の学習をする上で標準関数を自作することはとても勉強になります。

この記事では文字列比較関数(strcmp)を自作する方法について解説します。

文字列比較関数の仕様

標準関数の文字列比較関数は、引数に渡した2つの文字列の差を返します。

C
int cmp = strcmp("hoge1", "hoge2");

引数に渡された2つの文字列が等しい時のみ0を返し、そうでない場合には先頭から比較して始めに見つかった差異文字列の大小関係によって1または-1が返されます。

  • 第一引数 = 第二引数:0
  • 第一引数 > 第二引数:1
  • 第一引数 < 第二引数:-1

また、渡された引数のどちらにもNULL文字が存在しない場合には動作未定義となります。

文字列比較関数を自作

文字列比較関数は、渡された2つの引数を先頭から走査して、差分があれば大小関係を1, -1で、差分がなければ0を返します。

// 自作文字列比較関数
int my_strcmp(const char* s1, const char* s2)
{
    // 先頭から走査して差があればループ終了
    for(; *s1 == *s2; s1++, s2++)
    {
        // 終了前に終端文字が見つかったら差分なし
        if(*s1 == '\0')
        {
            return 0;
        }
    }
    return *s1 > *s2 ? 1 : -1;
}

上記関数と標準関数のstrcmpを比較するとどちらも同様の結果となります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です