読んで欲しい人
・1時間前の私。
・文字列同士の比較をしたい人。
・プログラミングを教えている人、詳しい人。(間違えてたら教えてください)
・Atcoderのabc166のaの問題を解いた人。
注意
・Atcoderのabc166のaの問題をこれから解く人。
strcmp関数とは
文字列を文字列で比較する関数。strcmp関数の参考にした記事
ACしたコード
#include <stdio.h>
#include <string.h> //strcmp関数を使うときに必要なやつ
int main()
{
char s[4];
scanf("%s",s);
// printf("s=%s\n",s);
char str[4] = "ABC"; //ここを定義していなかった
// printf("str=%s\n",str);
char str1[4] = "ARC";
// printf("str1=%s\n",str1);
if (strcmp(s, str) == 0){
//printf("sとstrが一緒だったら%s\n",str1);
printf("%s\n",str1);
} else {
printf("%s\n",str);
}
return (0);
実行結果
ARC
間違えたコード
#include <stdio.h>
#include <string.h>
int main()
{
char s[4];
scanf("%s",s);
// printf("s=%s\n",s);
char str[4] = "ARC";
printf("str=%s\n",str);
if (strcmp(s, str) == 0){
// printf("sとstrが一緒だったら%s\n",str1);
printf("%s\n",str);
} else {
printf("%s\n",str);
}
return (0);
}
実行結果
ARC
そうです。同じ結果でした。
実行結果が同じだから間違えている箇所を見つけられなくて詰みました。
学んだこと
例えば
与えられる文字列sが"ARC"、定義した文字列strが"ARC"だけの場合、間違えたコードだと
与えられる文字列sが"ABC"の時にしか対応しないことに気づいたので
今回の文字列の比較の問題は文字列 "ABC" と "ARC" を宣言する必要があることを学びました。
まとめ
・文字列同士の比較は比較したい文字列を全部定義する。
追記(先輩方に教えてもらったこと)
1、strcmp関数は比較したい文字列をダブルクォーテーションで囲めば比較できる。
if (strcmp(s, "ARC") == 0){
printf("ABC\n");
} else {
printf("ARC\n");
}
Man page of STRCMP見てみたけどちょっとわからなかった。
2、Atcoderでいろんな解答をストックしてみる。
与えられる文字列と判定する文字列を変数にする場合(私と似てるコード)
添字で判定①
文字列 ABC と ARC の B か R で判定して Bの場合はR、Rの場合はB を代入する方法。
添字で判定②
文字列 ABC と ARC の B か R で判定して出力する方法。
教えて頂いた方に感謝
FLASH1Nさん
nekoti10chomeさん
@fujitanozomuさん
コードの訂正や、コードのいろんな書き方を教えてくださりありがとうございます!
また、よろしくお願いします!
過去の自分に助けてもらった回数
1回目:2023/01/17
AtcoderのB - Judge Status Summary