ページ 11

お願いします

Posted: 2009年7月07日(火) 00:19
by ユーリ
キーボードからアルファベット文字列を入力し、文字列の中の母音(a,e,i,o,u)を'='に置き換えて表示するというプログラムなのですが
#include <stdio.h>

int main(void)
{
char moji[/url];
printf("文字を入力してください");
	scanf("%S",&moji);

	
	
	printf("%S",moji);
	return 0;
}
最初の方はできたのですが母音を=に置き換えて表示するにはどうしたらいいですかね?
ヒントを貰えないでしょうか?

Re:お願いします

Posted: 2009年7月07日(火) 00:39
by conio
>>最初の方はできたのですが
残念ながら出来ていないように思えます。
エラーが出るのではないですか?

----------------------------------------------------
char moji[/url];
これではサイズが不明です。
適当な数でいいので指定しないとエラーになりますよ。
(省略可能の場合もありますが、今回の書き方だと省略不可です)


scanf("%S",&moji);
文字列の場合、&は要らないです。
あと、大文字ではなく、小文字ではないかと。 %S ⇒ %s
----------------------------------------------------

Re:お願いします

Posted: 2009年7月07日(火) 00:40
by ねこ
<ヒント1>
例えば入力で「kakikukeko」と入力した場合、mojiには以下のように情報が入っています
moji[0]:'k'
moji[1]:'a'
moji[2]:'k'
moji[3]:'i'
moji[4]:'k'
moji[5]:'u'
moji[6]:'k'
moji[7]:'e'
moji[8]:'k'
moji[9]:'o'

<ヒント2>
文字を1文字ずつ比較するのはif( moji[x] == 'a' )と判定出来ます。

<ヒント3>
指し変えるためには「moji[x] = '='」と処理します。

<ヒント4>
文字数を取得するには「int mojisu = strlen(moji);」で取得する事が出来ます。

これで分からなかったらその次は「ヒント」じゃなくて「答え」になります。

Re:お願いします

Posted: 2009年7月07日(火) 01:04
by Hermit
文字を一文字ずつ比較する処理を書くのは面倒なので、
一気に比較する為に、
switch() や、strchr() 等をよく使います。
switch(moji) {
			case 'a': case 'i': case 'u': case 'e': case 'o':
				moji = '=';
		}
とか、

		if (strchr("aiueo",moji))
			moji = '=';
とか。


コンピュータ内部での処理は遅くなるかもしれません。簡単に書くためだけです。

Re:お願いします

Posted: 2009年7月07日(火) 22:26
by ユーリ
#include <stdio.h>

int main(void)
{
   char i;
	char moji[30];
	printf("文字を入力してください\n");
	scanf("%s",moji);
switch(moji) {
			case 'a':
			case 'i':
			case 'u':
			case 'e':
			case 'o':
			break;
	
		}
	moji='=';
	printf("%s",moji);
	return 0;
}

これで実行したら初めの文字だけが=になるのですがどのようにしたらよいのでしょうか?

Re:お願いします

Posted: 2009年7月07日(火) 22:31
by バグ
変数iは何の為に使ってますか?

Re:お願いします

Posted: 2009年7月07日(火) 22:45
by ユーリ
ありがとうございました。
解決いたしました。