1.5.2 文字のカウント, 1.5.3 行数のカウント, 1.5.4 単語のカウント, 演習1-8, 演習1-9, 演習1-10, 演習1-11, 演習1-12 K&R プログラミング言語C
2009年11月30日
1.5.2 文字のカウント
while
や for
ではループ本体に入る前にテストが行なわれる。
最初からテストに失敗した場合は本体は1度も実行されない。
1.5.3 行数のカウント
シングルクオートで囲まれた文字の内部表現を文字定数と呼ぶ。
文字定数は整数を表現する。
'A'
は 65
を表わす。
エスケープ文字は文字定数の中でも有効。'\n'
は 10
を表す。
'\n'
は1つの文字を表すのに対し、"\n"
は1つの文字だけを含む "文字列" を表わす。
演習1-8
#include <stdio.h> int main(int argc, char *argv[]) { int c, ws, tb, nl; ws = 0; tb = 0; nl = 0; while ((c = getchar()) != EOF) { if (c == ' ') { ++ws; } if (c == '\t') { ++tb; } if (c == '\n') { ++nl; } } printf("%d\t%d\t%d\n", ws, tb, nl); return 0; }
実行結果
$ cat hoge1-8.txt 空白 と タブ と 改行を 数える プログラム です。 $ cat hoge1-8.txt | ./ex1-8 3 2 4
演習1-9
#include <stdio.h> int main(int argc, char *argv[]) { int c, buf; while ((c = getchar()) != EOF) { if (c == ' ') { buf = ' '; } else { if (buf == ' ') { putchar(buf); buf = '\0'; } putchar(c); } } return 0; }
実行結果
$ cat hoge1-9.txt 連続する空白 を置き換えます。 1つの空白 はそのままです。 $ cat hoge1-9.txt | ./ex1-9 連続する空白 を置き換えます。 1つの空白 はそのままです。
演習1-10
#include <stdio.h> int main(int argc, char *argv[]) { int c; while ((c = getchar()) != EOF) { if (c == '\t') { printf("\\t"); } else if (c == '\b') { printf("\\b"); } else if (c == '\\') { printf("\\\\"); } else { putchar(c); } } return 0; }
実行結果
$ cat hoge1-10.txt タブ と、 バックスペー#を表示して、 バックスラッシュ\をエスケープ表示します。 $ cat hoge1-10.txt | ./ex1-10 タブ\tと、 バックスペース\bを表示して、 バックスラッシュ\\をエスケープ表示します。
1.5.4 単語のカウント
nl = nw = nc = 0;
3つの変数全てに 0
をセットする。
代入文には値があるため nl = (nw = (nc = 0));
と等しい。
if (c == ' ' || c == '\n' || c == '\t') {
&&
や ||
でつながれた式は左から順に評価されて行く。
||
では評価が真であれば以降のテストは実行されない。
演習1-11
1行テキストでは末尾の改行の有無で行数のカウントが異なる。
$ echo "foo" >hoge1-11.txt $ cat hoge1-11.txt | ./wc 1 1 4 $ echo -n "foo" >hoge1-11.txt $ cat hoge1-11.txt | ./wc 0 1 3
演習1-12
#include <stdio.h> #define IN 1 #define OUT 0 int main(int argc, char *argv[]) { int c, state; state = OUT; while ((c = getchar()) != EOF) { if (c == ' ' || c == '\n' || c == '\t') { state = OUT; putchar('\n'); } else if (state == OUT) { state = IN; putchar(c); } else { putchar(c); } } return 0; }
実行結果
$ cat hoge1-12.txt the quick brown fox jumps over the lazy dog. $ cat hoge1-12.txt | ./ex1-12 the quick brown fox jumps over the lazy dog. $
プログラミング言語C 第2版 ANSI規格準拠
posted with amazlet at 09.11.27
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
共立出版
売り上げランキング: 9726