- ベストアンサー
入力した文字列から母音だけを出力するプログラム
文字列を入力し母音だけを出力するプログラムを作りました。 以下だと小文字の母音しか出力できないので大文字にも対応させたいのですが、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
- みんなの回答 (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; こんな感じでどうでしょう。
その他の回答 (3)
- colder
- ベストアンサー率43% (30/69)
ループ部分だけ。 for (i = 0; i < strlen(str); i++) if(strchr("aiueoAIUEO",str[i])) putchar(strchr[i]);
お礼
strchr関数を使う方法ですね。 こんな便利な関数があったとは・・・今までよくヘッダ内の関数について調べたことがなかったので、今度じっくり調べてみます。ありがとうございました。
- neKo_deux
- ベストアンサー率44% (5541/12319)
「指定した文字(char)が母音かどうかを判定する関数」を作って、修理を分けると見やすくなるかと。
お礼
母音を判定し出力するという関数にして作ってみました。 これだけだと余り変わりませんが、もっと長いプログラムになった場合は見やすくて応用がききそうですね。ありがとうございました。
- X-trail_00
- ベストアンサー率30% (438/1430)
母音も別の配列に入れて 多重ループにすれば? 外側が入力文字列配列のループで 内側が母音配列のループ 内側は一致すればputcharして抜けるようにする。
お礼
ありがとうございます。 なるほど、配列に母音を格納して比較するという手がありましたね。 皆さんの御回答を参考に早速作り直してみました。 /* 入力した文字列のうち、母音だけ出力する */ #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; }
お礼
具体的な回答ありがとうございます。 コードを見て、何故fgetsを使うのだろうと思い調べてみました。 getsは使わない方が良いんですね。実際にMAXSTRの値を短くして、それ以上の入力を与えてみたらプログラムが強制終了してしまいました。fgetsだとちゃんとMAXSTRの長さで入力を切ってくれました。 これからはfgetsを使うようにします。