プログラミング ポインタを使った文字列比較
プログラミング ポインタを使った文字列比較
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 =」の右のスペースが文字化け?してしまいます。(半角カタカナや記号が出る)ただ、その後に文字列を入力すると、正しく機能します。
これは何が悪いなのでしょうか、どなたか教えてください。
お礼
みなさんありがとうございます。 ただみなさんのおっしゃっているあたりのことは私も大体理解できているのです。 (すみません、初めに言っておくべきでした。) ただわざわざ2種類用意されている必然性って何なのでしょうか。 いろんなソースを見ていると char *strもあればchar str[]もありますが べつにどちらか片方あればいいんじゃないでしょうか。 あるソースでchar *strと宣言した方は何故char str[]じゃ嫌だったんでしょう。 逆もまた然りです。