冗長
入力されたアルファベット(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時になったら波の本取りに行かなくちゃ