移動式のブログ

ガジェット、アニメ、プログラミング、考えたことその他色々・・・特にこれといったテーマはないカオスなブログです。

C言語 文字列比較 strcmp

c言語をいじくっていて、日本語を比較しようと試みたがうまくいかない



ダメなコード


例えば、上のソースコードは、scanfで入力した文字列が配列bの中に存在していたら「ばかやろう」と出力されるように組んだものだ。
if(a==b[i])となっているので、aに入れた文字列とb[i]に入っている文字列を比較して、同じなら"ばかやろう"と表示される。

しかし、このコードは上手く動かない。

配列b内に存在しているはずの"アホ"や"まぬけ"などと入力しても、"ばかやろう"と返してくれない。


このコードのまずかったところは、文字列aと文字列b[i]を直接このように→ a==b[i] 比較していたところだ。



C言語で文字列を比較したい場合、strcmp関数を使えば良いらしい。
この関数は、文字列を比較して、同じ文字列の時に0を返す。
つまり、strcmp(a,b[i])と書いたときにaとb[i]が同じなら、strcmp(a,b[i])は0となるのだ


if文の中をstrcmp(a,b[i])==0に組み替えて、アホとか入力してみたら今度は"ばかやろう"と出力されたので、成功だ。



上手くいったコード


まとめとして、
C言語で、漢字とかひらがなとかの文字列を照合したり比較したりするときはstrcmpを使えばよい


全角文字は、配列の要素数を2~3個分使うので、サイズを大きめに確保しておく。

今回は、a[7]だと、"まぬけ"の文字列をscanfで読み取れたが、
[]の中を6にしたら"まぬけ"と入力しても上手く動かなかった。