C++サンプル集

【第1部】C言語(K&R検証)編

0005.行と単語のカウント

ソース紹介

CPPファイルに記述
#include <iostream>
#include <cstdio>
using namespace std;

#define IN 1
#define OUT 0

int main()
{
    char c;
    int nl, nw, nc, state;
    state = OUT;
    nl = nw = nc = 0;
    while ((c = cin.get()) != EOF) {
        ++nc;
        if (c == '\n') {
            ++nl;
        }
        if (c == ' ' || c == '\n' || c == '\t') {
            state = OUT;
        }
        else if (state == OUT) {
            state = IN;
            ++nw;
        }
    }
    cout << "行: " << nl ;
    cout << " 単語: " << nw;
    cout << " 文字: " << nc << endl;
    return 0;
}
出力
abcdefg
1234 890s       ooo
Agbd;&%Lswo
AAA BBB CCC DDD
^Z
行: 4 単語: 9 文字: 56

サンプル説明

 このサンプルは標準入力に入力された文字を1つ1つ調べて、どういうグループに属するかを調べるサンプルです。
 単語をカウントするためにINおよびOUTという指標を立ててます。
 こういった指標(フラグともいう)の考え方は、このプログラムに限らず、どのシーンでも出てくるものです。
 場合によっては変数の各ビットに対して指標を立て、状態をデータ化する場合もあります。
 アルゴリズムの基本ともいうべきテクニックかと思います。

K&Rでの記述

 元になったのは第1章:やさしい入門に記述されています。単語のカウントの説明のところです。