Thinkers'Studio
JavaとC言語の自習ツール
文字列比較クイズ( C言語版 )

文字列の比較に使う strcmp 関数

 【 関数の形式 】
int strcmp( const char *s, const char *t )

strcmp の戻り値

 文字列 s と t を比較し、最初に見つけた異なる文字の文字コードを比べて、次のいずれかの値を返します。
    s < t のとき   負の値
    s > t のとき   正の値
 s と t が同じなら、ゼロを返します。

(これを踏まえて、今回のクイズです)
 次のプログラムを見てください。 strcmp を使ったものを含め、3種類の処理を書いています。
 正しく文字列比較の判定を行うのは (1) 〜 (3) のうち何番でしょう?
#include <stdio.h>
#include <string.h>
main()
{
    char buf1[] = "Hello";
    char buf2[] = "Hello";

    // --------- (1) ----------
    if( strcmp( buf1, buf2 ) )
        printf( "(1)同じ\n" );
    else
        printf( "(1)違う\n" );

    // --------- (2) ----------
    if( strcmp( buf1, buf2 ) == 0 )
        printf( "(2)同じ\n" );
    else
        printf( "(2)違う\n" );

    // --------- (3) ----------
    if( buf1 == buf2 )
        printf( "(3)同じ\n" );
    else 
        printf( "(3)違う\n" );
}

 間違っているものは、その理由も考えてみましょう。
   (答えは、次回のC言語の Tips で ・・・)

前回のクイズの答え: (前回の問題を見る
 str[i++] = num % 10 + '0'; で '0' を足している理由は、「数値」を「文字」に変換するためです。

 数字の文字は '0', '1', '2' ・・・ と大きさ順に並んでいます。
 たとえば、文字 '0' の文字コードに 2 を足したものは文字の '2' です。

 出題のコードは、num % 10 で 1 の位の「数値」を求め、'0' を足して「文字」に変換し str[i] に代入する処理です。