冗長 | spin on the RITZ

冗長

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