関数を使った文字列の比較

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たかし
記事: 48
登録日時: 12年前

関数を使った文字列の比較

#1

投稿記事 by たかし » 12年前

文字列を表す char型の配列a と b を受け取り、その2つの文字列が同じ文字列であれば1を返し、違う文字列であれば0を返す関数 を作りたいのですが、コンパイルするとエラーが出てしまいます。

以下が僕の作ってみたプログラムです。

コード:

#include <stdio.h>

int equal(char a[],char b[])
{
	int i;
	while(a[i]!=0)
	{
		if(a[i]!=b[i])
		{
			return(0);
		}
		i=i+1;
	}
	return(1);
}

int main (void)
{
	int answer;
	answer=equal("hello","ohayou");
	
	if(answer==1){
		printf("correct\n");
	}
	else{
		printf("miss\n");
	}



	return(0);


}
これをデバッグしてみたら、


Debug Error!

Program: ...cumens\visual studio
2010\Projects\ex4-3.c\Debug\ex4-3.c.exe
Module: ...cuments\cisual studio
2010\Projects\ex4-3.c\Debug\ex4-3.c.exe
File:

Run - Time Checked Failure #3 - The variable 'i' is being used without being initialized.

(Press Retry to debug the application)

とでてきてしまいます。

このプログラムに何かおかしいところがあるということでしょうか?
おかしなところがあれば教えていただきたいです。

現在の環境は以下のとおりです
OS:Windows 7 Home Premium
コンパイラ:Microsoft Visual C++ 2010 Express



よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 関数を使った文字列の比較

#2

投稿記事 by softya(ソフト屋) » 12年前

エラーメッセージのとおりです。
int i;
while(a!=0)
とプログラムが書いてありますがaのiは何番目を指しているでしょう?

あとこのプログラムは文字列の長さが同じじゃないとバグります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

たかし
記事: 48
登録日時: 12年前

Re: 関数を使った文字列の比較

#3

投稿記事 by たかし » 12年前

softya(ソフト屋) さん、ご指摘ありがとうございます。
さっそく、iに初期値0を与え、while文の条件もa!=0 かつ b!=0にしてプログラムを作りました。
(比較する文字列も変更しました。)
しかし、2つの文字列は違うものにしたのに帰ってくる値が1になってしまいました。
以下が改めて作ったプログラムです。

コード:

#include <stdio.h>	

int equal(char a[],char b[])
{
	int i;
	i=0;
	while(a[i]!=0 && b[i]!=0)
	{
		if(a[i]!=b[i])
		{
			return(0);
		}
		i=i+1;
	}
	return(1);
}

int main (void)
{
	int answer;
	answer=equal("These are also","These are also similar");

	if(answer==1){
		printf("correct\n");
	}
	else{
		printf("miss\n");
	}

	return(0);

}
なぜ返り値が0にならないのかわかりません。
たびたび申し訳ないのですが、教えていただけないでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 関数を使った文字列の比較

#4

投稿記事 by softya(ソフト屋) » 12年前

while(a!=0 && b!=0)
だとaかbのどちらかが文字列終端になるとreturn 1になります。
文字列の長さが違ったら、そもそもreturn 1はありえないのでは?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る