【第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章:やさしい入門に記述されています。
単語のカウントの説明のところです。