K&R演習[1-9]

課題

二つ以上の空白を一つの空白に置き換えながら、入力を出力に複写するプログラムを書け。

ソースコード

#include <stdio.h>

int main(void)
{
    int c1, c2, cnt;

    cnt = 0;
    while ((c1 = getchar()) != EOF) {
        if ((cnt >= 2) &&   // 2文字目以降で
            (c2 == c1) &&   // 前の文字と同じで
            (c1 == ' ')) {  // スペースであれば
            continue;       // 次の文字へ
        }
        printf("%c", c1);   // 出力
        c2 = c1;            // 今回の文字を記憶
        cnt++;              // 文字数カウンタ
}

実行内容

「fdsa f」と入力後、Enterキー入力。

実行結果

fdsa  f
fdsa f
poi   io  87        56
poi io 87 56

所感

「二つ以上の空白」って、「連続した二つ以上の空白」って意味でしょうね。