※ ChatGPTを利用し、要約された質問です(原文:プログラミング ポインタを使った文字列比較)
プログラミングでポインタを使った文字列比較
このQ&Aのポイント
プログラミングでポインタを使用して文字列を比較する方法について説明します。
与えられた2つの文字列が等しい場合、0を返し、等しくない場合は1を返す関数str_compareを作成します。
しかし、プログラムを実行すると、文字化けが発生し、正しく機能しません。この問題の原因と解決方法を教えてください。
プログラミング ポインタを使った文字列比較
2つの文字列str1, str2を入力し,それらが等しければ0,等しくなければ1を返す関数str_compareを作り、返り値によって以下のように表示するプログラムを作れ。ただし,関数strcmpを使ってはならない。
文字列の入出力はmain関数で行い,関数str_compareの仮引数にはポインタ変数を宣言し,ポインタと間接演算子*を用いた処理を行うこと。
% ./a.out
input str1 = Worldcup
input str2 = Worldcup
same strings
% ./a.out
input str1 = World
input str2 = cup
different strings
この問題に私は次のようにプログラミングしました。
#include <stdio.h>
#define MAX 100
int str_compare(char *, char *);
main()
{
char str1[MAX], str2[MAX];
printf("input str1 = %s", str1);
scanf("%s", str1);
printf("input str2 = %s", str2);
scanf("%s", str2);
str_compare(str1, str2);
if (str_compare(str1, str2) == 0)
printf("same strings\n");
else if (str_compare(str1, str2) == 1)
printf("different strings\n");
}
int str_compare(char *s1, char *s2)
{
int i;
for (i = 0; s1[i] != '\0'; i++) {
if (s1[i] != s2[i]) {
break;
}
}
if (s1[i] == s2[i]) {
return 0;
} else {
return 1;
}
}
これで実行したところ、「input str1 =」の右のスペースが文字化け?してしまいます。(半角カタカナや記号が出る)ただ、その後に文字列を入力すると、正しく機能します。
これは何が悪いなのでしょうか、どなたか教えてください。
お礼
ご回答ありがとうございます。 >>>ポインタと間接演算子*を用いた処理を行うこと。 >>この条件を満たしていないのでは? 確かに、添え字を使って誤魔化していますね… 以下のように、str_compare関数の中身だけ変更しました。これでOKですか? int str_compare(char *s1, char *s2) { while (*s1 == *s2){ if (*s1 == '\0') return 0; s1++; s2++; } return 1; }