- 締切済み
C言語を現在勉強しています。わからないことがあり
こんにちは 現在C言語を勉強しておりまして、わからないことがありましたので質問させていただきます。 下記のような文字列があります。 この文字列で、A~Eまでの各英文字がそれぞれ何回登場してくるかがわかるプログラムを作成しなさい。 (for文を使い、'\0'をループの終了判定条件にすること。switch文を使用すること) #include <stdio.h> int main() { char ch[] = "EADBACABEEAAC"; という問題なのですが まったく手も足もでない状態です。 なにかヒントや、アドバイスを頂ければと思います。 よろしくお願いします
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- shin_nosuk
- ベストアンサー率70% (31/44)
こんばんは。 手も足も出ませんか。 > 配列の中に一つずつ入れてするのではないかと思いやってみたのですが > これはすべてひとつの文字にまとめられているので > どうすればそれぞれの回数を計算することができるかわからなかったので質問をさせてもらいました。 という補足を読む限り、文字と文字列の違いを把握していないのでしょう。 たとえば、文字列 "EADBACABEEAAC" について Visual Basic なら、 Mid("EADBACABEEAAC",2,1) → "A" Java なら "EADBACABEEAAC".substring(0,1) → "E" で部分文字列が取れますが、C の文字列(char[])で部分文字列を取得する方法は関数ではなくて、 言語仕様で用意されてます。 "EADBACABEEAAC" の 1文字目から1文字とるにはどうしたらよいか。 お手持ちの教本の最初のほうに書いてあると思いますよ。 ちなみにこれはあとから出てくるポインタのことなのでちゃんと現象を理解してね☆ 下に書いてあるので正解は、 char ch[] = "EADBACABEEAAC"; について、 ch[0] → 'E' ch[6] → A ですね。ch[13] は? ここまでわかればあとは for と switch を組み合わせてがんばろう。
- 0xEF
- ベストアンサー率50% (1/2)
#include <stdio.h> int main() { char ch[] = "EADBACABEEAAC"; int i=0; //int ary[5]={0}; int a=0,b=0,c=0,d=0,e=0; for( i=0;ch[ i ] != '\0';++i ) { switch( ch[ i ] ) { case 'A': a++; //ary[0]++; break; case 'B': b++; //ary[1]++; break; case 'C': c++; //ary[2]++; break; case 'D': d++; //ary[3]++; break; case 'E': e++; //ary[4]++; break; default: break; } } printf( "A %d回\nB %d回\nC %d回\nD %d回\nE %d回\n",a,b,c,d,e ); } 脳内コンパイル 多分これで
「switch文を使用すること」が条件にあるので,1回のループで文字を判定するべきでしょう。カウントすべき'A'~'E'とループを終了すべき'\0'の6文字をswitch文で.
- tomoac
- ベストアンサー率12% (21/168)
配列なのでループさせ、Aから、文字列をひとつずつ取り出して数えます。 AからEまで、5回ループをならべればいいでしょう。
- t_ohta
- ベストアンサー率38% (5238/13705)
for文を使ってループで文字を取り出して、switch文で文字を判定し、A~Eまでの各英文字がそれぞれ何回登場したかカウントすると出来ますよ。
- tomoac
- ベストアンサー率12% (21/168)
どうすればいいかを、口でいえますか? 口でもいえないなら、プログラムを作る以前の勉強が必要ですが。 口でいえるなら、それを書いて質問してください。
補足
配列の中に一つずつ入れてするのではないかと思いやってみたのですが これはすべてひとつの文字にまとめられているので どうすればそれぞれの回数を計算することができるかわからなかったので質問をさせてもらいました。