4

私はここに不慣れで、プログラミングロジック全般に比較的慣れていません。スキルを磨くために、この優れた文献を読み始めました。概念をよく理解していると感じていますが、この演習では不意を突かれたようです。私はプログラムを作成することができますが、私が見たいくつかの例は、ここの例のように本でまだカバーされていないいくつかの概念を導入しているようです. inspaceプログラマによって作成された単なる変数以上の機能を提供しているようです。

#include <stdio.h>

int main(void)
{
    int c;
    int inspace;

    inspace = 0;
    while((c = getchar()) != EOF)
    {
        if(c == ' ')
        {
            if(inspace == 0)
            {
                inspace = 1;
                putchar(c);
            }
        }

        /* We haven't met 'else' yet, so we have to be a little clumsy */
        if(c != ' ')
        {
            inspace = 0;
            putchar(c);
        }
    }    
    return 0;
}

次の例でpcは、スペースのカウントに関して何かをしているように見えますが、何をしているのかわかりません。

このタスクを完了するプログラムを作成することができましたが、作成した変数 c のみを使用していたため、その目的を理解しています。

4

4 に答える 4

2

このコードの目的はテキストをコピーすることであり、複数のスペースが' '連続してある場合は、1 つのスペースのみを印刷します。

変数inspaceは、最後に出力された文字がスケープか非スペースかを追跡するために使用されます。
ゼロの場合inspaceは、スペースではない文字が出力されたことを意味します。1の
場合inspaceは、前回のスペースが印刷されたことを意味します。

したがって、inspaceゼロの場合は、次にスケープを読み取ったときにスケープを出力できます。また、スケープinspaceが 1 の場合は、スペースを出力しないように次の連続するスケープが検出されます。

C現在の文字読み取りを参照してください。(コメントを読む)

  if(c == ' ')  // currently space read
    {
      if(inspace == 0) // last time non-space printed, So space can be print
      {
        inspace = 1;   // printing space so switch inspace 1
        putchar(c);   // print space
      }
    }

if

if(c != ' ') // A char not space read, its to to print unconditionally  
{
  inspace = 0;  // remember that non-scape print
  putchar(c);
}
于 2013-03-19T10:55:39.920 に答える
1

inspaceは本質的に、「スペースを見たばかり」の状態にあるかどうかを示す変数です。スペースが表示された後にこの状態に入り、非スペースが表示されたときにこの状態を終了します。状態にない場合にのみ入力を印刷するinspaceため、隣接する複数のスペースを印刷することはありません。

このタスクを完了するプログラムを作成できましたが、作成した変数cのみを使用していたため、その目的を理解しています。 プログラムで、入力が「hello world」の場合、それは正確な出力ですか?投稿したプログラムは「helloworld」を出力します(単語間の複数のスペースを1つに圧縮します)。

于 2013-03-19T10:54:27.263 に答える