ページ 11

またまた課題(文字列)

Posted: 2007年7月06日(金) 10:44
by 徹夜
文字strの中に、文字cが含まれていなければ(複数ある場合は最も先頭側とする)

その添え字を返し、含まれていなければ-1を返す関数

この問題で含まれている 含まれていないがよくわかんないんですね
↓に書いてみましたが教えてください
int str_char(const char str[/url],int c)
	{
		unsigned len=0;
		while(str[len]){
			if(str[len]==c)
				return(len);
			len++;
		}
		printf("-1\n");
	
		
	}

		int main()
		{
			char st[100];
			int c='A';
			int no;
			printf("文字列を入力した下さい:");
			scanf("%s",st);
			no=str_char(st,c);
			if(no>=0)printf("指定した文字は%d番目に見つかりました\n",no);
			else printf("指定した文字は見つかりませんでした\n");
			
		}

Re:またまた課題(文字列)

Posted: 2007年7月06日(金) 11:09
by keichan
>printf("-1\n");
  ↓
return -1;


>この問題で含まれている 含まれていないがよくわかんないんですね
申し訳ありませんが、質問の意味がわかりません。
詳しい補足をお願いします。

Re:またまた課題(文字列)

Posted: 2007年7月06日(金) 11:16
by バグ
1:str_char関数で指定した文字が見つからなかった場合の戻り値が設定されていません。

2:[ if(no>=0) ]この部分ですが、個人的にはエラーだった場合を判定した方がいいかと思います。あくまでも個人的な意見なので、間違いではありません。

3:これも個人的な意見ですが、[ unsigned len; ]これも[ unsigned int len; ]のように明示的に宣言しておいた方がより良いかと思います。

※2と3は本当に個人的な意見なので、無視してもらってもかまいません
#include	<stdio.h>

int str_char(const char str[/url], int c)
{
	unsigned int len = 0;

	while (str[len] != '\0')
	{
		if (str[len]==c)
		{
			return len;
		}

		len++;
	}

	return -1;
} 

int main()
{
	char st[100];
	int c = 'A';
	int no;

	printf("文字列を入力して下さい : ");
	scanf("%s", st);
	no = str_char(st, c);

	if(no == -1)
	{
		printf("指定した文字は見つかりませんでした\n");
	}
	else
	{
		printf("指定した文字は%d番目に見つかりました\n",no);
	}

	return 0;
}

Re:またまた課題(文字列)

Posted: 2007年7月06日(金) 11:19
by 管理人
return -1さえ直せば実行結果としてとりあえず出ていると思いますが、どこが足りないのでしょうか?
またno番目だと、見た感じ1文字足りていないように思うので、no+1番目としたほうがよくないでしょうか。

それともプログラムコードについては配布されたもので、このコードの意味がわからないと言う事でしょうか?

Re:またまた課題(文字列)

Posted: 2007年7月06日(金) 11:24
by バグ
あ、追記です。

4:main関数の戻り値がありません。

Re:またまた課題(文字列)

Posted: 2007年7月11日(水) 16:10
by 徹夜
大変遅くなりましたが質問した内容は解決いたしましたが、
文字列strの中に文字cが含まれている個数(なければ0)を返す関数で
returnの返し方が分かりません。というか上記のプログラムで表示とか変更した上でreturnのみを変換すればできるということなのでしょうか?

文字列str内のすべての数字を削除するプログラムを作りたいのですが、これもよくわかりません。

文字列は実行時に入力で求めたいです