第3回オフラインリアルタイムどう書くの参考問題をC++の練習に使ってみた


プログラムはやはり何かを作ろうとしないと覚えられない。
ということで、オフラインリアルタイムどう書くのこの問題がC++の練習にほど良いレベルだったので書いてみました。

問題はこちら

BallCount.cpp
#include <stdio.h>
#include <iostream>
#include <cstring>

int main(){

    std::string input;
    char result[10];
    char ch[10];
    int out,strike,ball;

    std::cin >> input;

    int len = input.size();

    for(int i = 0; i < len; i++){

        strcpy(ch, input.substr(i, 1).c_str());

        switch(ch[0]){

            case 's':
                strike++;
                if(strike > 2){
                    strike = 0;
                    out++;
                }
                break;

            case 'b':
                ball++;
                if(ball > 3){
                    strike = 0;
                    ball   = 0;
                }
                break;

            case 'f':
                if(strike < 2){
                    strike++;
                }
                break;

            case 'h':
                strike = 0;
                ball   = 0;
                break;

            case 'p':
                strike = 0;
                ball   = 0;
                out++;
                break;

            default:
                break;
        }

        // アウトの数をカウント
        if(out > 2){
            out    = 0;
            strike = 0;
            ball   = 0;
        }

        // 結果出力
        std::cout << out;
        std::cout << strike;
        std::cout << ball;

        if(i != len - 1){
            std::cout << ",";
        }
    }

    std::cout << "\n";

    return 0;
}

実行

$ g++ -o BallCount BallCount.cpp 
$ ./BallCount 
sssbbbbsbhsbppp
010,020,100,101,102,103,100,110,111,100,110,111,200,000,100