質問: ### 実現したいこと 入力した文字列において一致する文字の数を求める。 ### 問題点 1つめの実行結果と3つめの実行結果が間違っている。 `s[7]`は`'\0'`だと思います。それが判定に入らないように`if(s[i]!='\0')`にしましたができませんでした。 **実行結果** ``` s : Abcdefg t : tochori s[2] t[2] s[7] t[7] Answer: 2 --------------- s : ABCDE t : aABCDE Answer: 0 --------------- s : Ab43 t : cd13 s[3] t[3] s[4] t[4] Answer: 2 ``` ### コード ``` //文字列の比較2 #include int main(void) { char s[21],t[21]; int i=0; int cnt=0; printf("s : "); fgets(s,21,stdin); printf("t : "); fgets(t,21,stdin); while(t[i]!='\0'){ if(s[i]==t[i]){ if(s[i]!='\0'){ printf("s[%d] t[%d]\n",i,i); cnt++; } } i++; } printf("Answer: %d\n",cnt); return 0; } ```
回答: 他に回答がありますが、入力した文字列の最後に改行コードがあるため余計にカウントされていますね。 対策としては2つ。 入力文字列から改行文字を削除(NULL文字に変換)してから比較する。 または比較するときに改行コードを除外する。 で、手っ取り早いのは後者で、if文を次のようにすればよいかと。 ``` if(s[i]!='\0'){ ↓ if(s[i]!='\0' && s[i]!='\n'){ ```