文字列を入力し母音だけを出力するプログラムを作りました。
以下だと小文字の母音しか出力できないので大文字にも対応させたいのですが、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
No.1
- 回答日時:
母音も別の配列に入れて
多重ループにすれば?
外側が入力文字列配列のループで
内側が母音配列のループ
内側は一致すれば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;
}
No.2
- 回答日時:
「指定した文字(char)が母音かどうかを判定する関数」を作って、修理を分けると見やすくなるかと。
母音を判定し出力するという関数にして作ってみました。
これだけだと余り変わりませんが、もっと長いプログラムになった場合は見やすくて応用がききそうですね。ありがとうございました。
No.3ベストアンサー
- 回答日時:
#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;
こんな感じでどうでしょう。
具体的な回答ありがとうございます。
コードを見て、何故fgetsを使うのだろうと思い調べてみました。
getsは使わない方が良いんですね。実際にMAXSTRの値を短くして、それ以上の入力を与えてみたらプログラムが強制終了してしまいました。fgetsだとちゃんとMAXSTRの長さで入力を切ってくれました。
これからはfgetsを使うようにします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
C言語プログラミングについて(回文、palindrome)
C言語・C++・C#
-
任意の文字列のアルファベットのカウント
C言語・C++・C#
-
再起呼び出しの回数をカウントするプログラム
C言語・C++・C#
-
-
4
C言語 exitの使い方
C言語・C++・C#
-
5
分数の足し算をさせるプログラムが分かりません。どなたか分かりませんか?
C言語・C++・C#
-
6
*をユーザーが入力した数字の数だけ表示するプログラムの作り方を教えてください
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
break文でループを一気に抜ける...
-
if文を使わずに奇数・偶数を判断
-
PAD図の書き方
-
for文while文の無限ループの違...
-
C言語forループが完結した場合...
-
桁数を求めるプログラム。
-
アルゴリズムです!四つの数字...
-
C言語 キーボードで入力された...
-
階層型ニューラルネットに準ニ...
-
IF文での条件の書き方について(...
-
While文の終わりにセミコロンが...
-
2÷3などの余りについて
-
C言語で%を使わない余りの出し方
-
比較回数と交換回数表示について
-
信頼区間の1.96や1.65ってどこ...
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
Notepad++の関数リスト表示の変...
-
C言語のfor文です。 繰り返しの...
-
正負を反転させて出力するプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
break文でループを一気に抜ける...
-
do-while文が禁止される理由
-
ループを途中で抜けたいのですが。
-
入力した数値を倍々するプログラム
-
入力した文字列から母音だけを...
-
if文の中にfor文なのか、for文...
-
C言語forループが完結した場合...
-
エクセルでC言語のfor文と同じ...
-
Excel VBAで年度をまたぐ期間の...
-
For文の終了値を関数にしても問...
-
エクセルVBAで Do While (1)って?
-
C言語、whileループを抜け出す...
-
PAD図の書き方
-
Cプログラムが終了しない
-
PIC のプログラムについて ど...
-
他言語で言うcontinue文
-
C言語のプログラムみてください...
-
ループの特定入力終了
-
COBOLのEVALUATE文
-
for文while文の無限ループの違...
おすすめ情報