冗長
入力されたアルファベット(a-z, A-Z)の個数を数えるプログラムを作りなさい
【解答】
#include <iostream> using namespace std; int main() { char c; int upp[26] = {}; int low[26] = {}; while (cin.get(c)) { switch (c) { case 'A': upp[0]++; break; case 'a': low[0]++; break; case 'B': upp[1]++; break; case 'b': low[1]++; break; case 'C': upp[2]++; break; case 'c': low[2]++; break; //以下同じ様な記述がずっと続く } } cout << "A : " << upp[0] << " a : " << low[0] << '\n'; cout << "B : " << upp[1] << " b : " << low[1] << '\n'; cout << "C : " << upp[2] << " c : " << low[2] << '\n'; //以下同じような記述がずっと続く return 0; }
from朝の図書館
C++第3版を読みこなすのは骨が折れるので、もっと簡単な本からやってみようと思ったんですが・・・・
上のような解答で面食らった
確かにAの次がBになってる保証はないですが、ほとんどAに1足せばBなんだから別にそう書いちゃえばいいじゃないの。
アルファベットの頻度を入れるテーブルとか作っちゃってさ、ちょっとメモリはいるけど違いは300バイトくらいでしょ?
#include <iostream> using namespace std; int main() { char ch; int table[128] ={}; while (cin.get(ch)) table[ch]++; char upp, low; for (upp='A',low='a';upp<='Z';upp++, low++) { cout << upp << " : " << table[upp] << " "; cout << low << " : " << table[low] << endl; } return 0; }
元々60行程ありましたが、20行弱になってスッキリしました。
10時になったら波の本取りに行かなくちゃ