• ベストアンサー

入力した文字列から母音だけを出力するプログラム

colderの回答

  • colder
  • ベストアンサー率43% (30/69)
回答No.4

ループ部分だけ。 for (i = 0; i < strlen(str); i++) if(strchr("aiueoAIUEO",str[i])) putchar(strchr[i]);

whisk
質問者

お礼

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

関連するQ&A

  • 入力した文字列の文字コードを16進数で出力

    入力した文字列の文字コードを16進数で出力するプログラムを作っているのですが 下のように記述してもどうしても最後にaが表示されてしまいます。 打開策、または何故aが表示されるのかを教えてください。 #include <stdio.h> main() { int str; while(1){ str=getc(stdin); if(str==EOF) break; printf("%x ",str); } return 0; }

  • 文字列を関数に渡すぷろぐらむなのですがおかしいです。

    <ソース> #include<stdio.h> #include<stdlib.h> void str(char a[]); int main() { char st[10]="abcde"; str(st); str("ABCabc123"); return 0; } void str(char a[]) { int i; printf("%s\n",a); i=0; while(a[i]){ a[i]=toupper(a[i]); putchar(a[i]); i++; } putchar('\n'); } 分からないところがあるので質問します。 toupperは、大文字にするんですよね。 putcharは、基本的にchar型でしたっけ? putsとgetsは、int型でしたっけ? 後、プログラムが暴走してます。 どこがおかしいんでしょう?

  • 文字列の扱い方

    初歩的な質問ですみません… str文字列からcという文字を見つけたら添字を返すという関数を作ったのですが、 iにこの関数を代入して、if文の制御式にiを使って比較するまでは正常なのですが、 真文にiを使うと何故か偽文(という言い方でいいのでしょうか…この場合("そんな値はありません。"というところです)が実行されてしまいます。 よろしければご教授お願い致します。 #include <stdio.h> int str_char(const char str[],int c) { int len = strlen(str); int i; for (i = 0;i < len;i++) { if (str[i] == c) return i; } return -1; } int main() { char str[64] = "Fucking Brutal Death Metal"; int ch,i; printf("どの文字を調べますか?"); scanf("%c",&ch); i = str_char(str,ch); if (i >= 0) printf("その文字は%d番目にあります。",str_char(str,ch) + 1); //何故かiだと動かない else printf("そんな値はありません。"); return 0; }

  • abcが、入力された文字列内にあるかどうかを表示するプログラム

    文字列strの中にabcが含まれていれば、1を返し、含まれていなければ0を返すプログラムが分かりません。 C言語の問題で下記のものが分かりません。どなたか知恵を貸してください。 ユーザが文字を入力し、CTRL+Zが押されるまで、半角英数字の入力(最大でも1000文字)を受け付ける。文字列「abc」が、入力された文字列内にあるかどうかを表示するプログラムを作成する。ユーザが入力した文字列が3文字未満はabcがありませんと表示させる。 そのプログラム内で以下の関数を完成させる。 int str_srch_abc(char str []) 文字列strの中にabcが含まれていれば、1を返し、含まれていなければ0を返す関数とする。 (例えばabcは連続でabcの時だけ1を返し、asbscなどはoを返します。) ちなみに自分なりにやってみたのですが、ここまでしかできませんでした。 #include<stdio.h> int main() { int str_srch_abc(char str []); char str[1000]; int ch=0, j=0; printf("半角英数字を入力してください"); scanf("%s",str); while((ch=getchar())!=EOF){ str[j]=ch; j++; } str[j]='\0'; printf("%s",str); return(0); }

  • 文字列中に含まれる文字の個数をカウントするプログラムについて…

    文字列、1文字が与えられたとき、これをポインタで入力し文字列中に含まれる文字の個数を計算するプログラムを作成せよ。 と、いう課題がだされたんですけど、ユーザが任意の文字列と1文字を入力できるようにすることができません…。 多分main関数の部分をちょっといじくればよいと思うのですが…。 どなたかアドバイスをお願いします。 #include <stdio.h> int count(const char *str, const char ch) { int cnt=0; while (*str!='\0') { if (*str==ch) cnt++; str++; } return cnt; } int main() { const char *str="hello,world!"; const ch='o'; int cnt; cnt=count(str, ch); printf("%s中に%cは%d個です\n", str, ch, cnt); return 0; }

  • C言語 文字列の操作

    文字Cが含まれる個数を求めたいです #include <stdio.h> int str_chnum(const char str[],int c) { int i; int count=0; for(i=0;str[i]!="\0";i++) if (str[i]==c) count++; return(count); } int main(void) { char st[100]; printf("検索文字列を入力してください:"); scanf("%s",st) ; printf("検索文字列数は%uです。\n",st,int str_chnum(const str[],int c)); return(0); } コンパイルできません。なぜですか?printfの行がたぶん間違っていると思うんですが。。。

  • 文字列処理関数について

    おみくじのプログラムを書きました。初めのが私のもので、次のが参考書のものなのですが、なんでわざわざ 文字列処理関数を使うのかがわかりませんでした。 教えてください!! int main() {   int r =0;   int i =0;   srand(time(NULL));   r = rand()%3+1;   for(i=0;i<2;i++){    if(r == 1)    {  printf("大吉:充実した1日\n");    }    else if(r == 2)    {  printf("小吉:充実した1日\n");    }    else    {       printf("凶:衝動買いに注意\n");    }    return 0; } ********************** ********************** main(){     int kuji;     char kekka[6];     char str[45];     srand(time(NULL));     r = rand()%3+1;     switch(kuji){     case 1:           strcpy(kekka,"大吉");         strcpy(str,"金運アップ");         break;    /*case2,3は省略します*/           default:    break; } printf("%s:%s",kekka,str); return 0; }

  • C言語 キーボードで入力された文字列を表示する方法

    はじめまして。 C言語を学習中です。 参考書の例文に、自分なりにコメントを付けて読み進めましたが、どうしても下記のfor文の処理が理解ずに困っております。 for (j = 0;j < i;j++) printf("%d\n",val[j]); なぜval[j](ジェイ)が出てくるのかがわかりません。 val[j](ジェイ)はval[i](アイ)とどのような関連性があるのでしょうか。 また、最後のfor文はどのような処理をしているのでしょうか。 どうか教えていただきたく、お願い致します。 ●例文 次のプログラムは、入力された数値の一覧を表示する例です。 #include <stdio.h> #include <stdlib.h> #include <string.h> void main(void) { int i,j,val[10]; char str[32],*ch; fgets(str,sizeof(str),stdin); /*キーボードで入力された文字列strを読込む*/ ch = strtok(str,",\n");   /* 文字列strの中から単語を取り出して変数chに代入*/ for (i = 0;i < 10;i++) {   /*for文(初期化i=0;条件式i<10;更新i++)*/ if (ch == NULL) {   /*文字列strの中に単語が無ければ*/ break;   /*ループを抜ける*/ } else {   /*文字列strの中に単語があれば*/ val[i] = atoi(ch); /*文字列strの中の最初の単語を数値に変換して配列valの                        i要素に代入する*/ } ch = strtok(NULL,",\n");  /*文字列strの中の次の単語を取り出す*/ } for (j = 0;j < i;j++) printf("%d\n",val[j]); return; } このプログラムの実行結果は次の通りになります。 85,41,26,956,12 入力した文字列 85 41 26 956 12

  • プログラム(初心者)

    文字列を入力し中に含まれる空白を削除した文字列を作るプログラムなのですが #include <stdio.h> #include <stdlib.h> int main(void){ char str[100]; int i,j,c; printf("文字列を入力してください\n"); gets(str); i=j=0; do{ c=str[i++]; if(c!= ' ') str[j++]=c; }while(c); printf("空白を削除した文字列は%sです\n",str); return EXIT_SUCCESS; } do文の所何やってるかさっぱりわかりません 教えてください

  • プログラムの課題で分からない問題があるので、ヒントを教えていただきたい

    プログラムの課題で分からない問題があるので、ヒントを教えていただきたいのです。 ちなみにfor文、if文、配列などを応用して(勿論ぜんぶ使わなくても良いです)プログラムをつくるものなのですが、配列をうまく理解してないので、どういう風に配列に代入して出力するかアドバイスお願いします。 ・キーボードから入力した2つの文字列(8文字以内)を比較して、同じときには○、異なるときは×と表示する int main(void) { char str[8]; int i,n,na; for (i=0;str1[i]= =str2[i];i++){ if (str1[i]= ='\0'){ n=1; }break; } というトコまでは何とか分かるのですが…