教えて!gooグレードポイントがdポイントに!

文字列を入力し母音だけを出力するプログラムを作りました。
以下だと小文字の母音しか出力できないので大文字にも対応させたいのですが、switch文のcaseを増やすと冗長になってしまう気がします。
switch文以外の方法でもっと簡潔に書く方法はありますか?ご教授お願い致します。

/*
入力した文字列のうち、母音「a,i,u,e,o」だけ出力する
*/

#include <stdio.h>
#include <string.h>

#define MAXSTR 256


int main(void)
{
char str[MAXSTR];
int i;

gets(str);

for (i = 0; i < strlen(str); i++)
switch (str[i]) {
case 'a':
putchar(str[i]);
break;
case 'i':
putchar(str[i]);
break;
case 'u':
putchar(str[i]);
break;
case 'e':
putchar(str[i]);
break;
case 'o':
putchar(str[i]);
break;
}
putchar('\n');

return 0;
}

実行結果:
What time is it now?
aieiio

教えて!goo グレード

A 回答 (4件)

#include <stdio.h>


#include <string.h>

#define MAXSTR 256

int main(void)
{
char str[MAXSTR];
int i,j;
char cmp[] = "aiueoAIUEO";

fgets(str,MAXSTR,stdin);

for (i = 0; i < strlen(str); i++)
for (j = 0; j < strlen(cmp); j++)
if(str[i] == cmp[j]){
putchar(str[i]);
break;
}

return 0;

こんな感じでどうでしょう。
    • good
    • 2
この回答へのお礼

具体的な回答ありがとうございます。
コードを見て、何故fgetsを使うのだろうと思い調べてみました。
getsは使わない方が良いんですね。実際にMAXSTRの値を短くして、それ以上の入力を与えてみたらプログラムが強制終了してしまいました。fgetsだとちゃんとMAXSTRの長さで入力を切ってくれました。
これからはfgetsを使うようにします。

お礼日時:2006/11/28 20:52

ループ部分だけ。



for (i = 0; i < strlen(str); i++)
if(strchr("aiueoAIUEO",str[i]))
putchar(strchr[i]);
    • good
    • 1
この回答へのお礼

strchr関数を使う方法ですね。
こんな便利な関数があったとは・・・今までよくヘッダ内の関数について調べたことがなかったので、今度じっくり調べてみます。ありがとうございました。

お礼日時:2006/11/28 20:55

「指定した文字(char)が母音かどうかを判定する関数」を作って、修理を分けると見やすくなるかと。

    • good
    • 0
この回答へのお礼

母音を判定し出力するという関数にして作ってみました。
これだけだと余り変わりませんが、もっと長いプログラムになった場合は見やすくて応用がききそうですね。ありがとうございました。

お礼日時:2006/11/28 20:59

母音も別の配列に入れて


多重ループにすれば?
 外側が入力文字列配列のループで
  内側が母音配列のループ
   内側は一致すればputcharして抜けるようにする。
    • good
    • 0
この回答へのお礼

ありがとうございます。
なるほど、配列に母音を格納して比較するという手がありましたね。

皆さんの御回答を参考に早速作り直してみました。
/*
入力した文字列のうち、母音だけ出力する
*/

#include <stdio.h>
#include <string.h>

#define MAXSTR 256


/* 母音を判定し出力する */
void vowel(char *str)
{
int i, j;
char cmp[] = "aiueoAIUEO";

for (i = 0; i < strlen(str); i++)
for (j = 0; j < strlen(cmp); j++)
if (str[i] == cmp[j])
putchar(str[i]);
putchar('\n');
}

int main(void)
{
char str[MAXSTR];

fgets(str, MAXSTR, stdin);

vowel(str);

return 0;
}

お礼日時:2006/11/28 20:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

人気Q&Aランキング