C编程语言K& R练习1-9

时间:2013-03-19 10:41:31

标签: c

我是新手,对编程逻辑总的来说比较新。为了发展我的技能,我开始阅读这篇精美的文献。我真的觉得我很好地掌握了这些概念但是这个练习似乎让我措手不及。我可以制作该程序,但我见过的一些例子似乎介绍了本书尚未涵盖的一些概念,例如hereinspace似乎正在提供的功能不仅仅是程序员创建的变量。

#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 个答案:

答案 0 :(得分:2)

此代码的目标是复制文本,如果有多个空格' '连续打印一个空格。

变量inspace用于跟踪上次打印的字符是scape还是非空格 如果inspace为零则表示打印的字符不是空格。和
如果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);
}

答案 1 :(得分:2)

我花了一段时间,但这是我想的答案。

#include <stdio.h>

main()
{
    int c, blank;
    blank = 0;

    while ((c=getchar()) != EOF){
        if (c == ' '){
            if (blank == 0){
                printf("%c", c);
                blank = 1;
            }

        }
        if (c != ' '){
            if (blank == 1){
                blank = 0;
            }
            printf("%c", c);
        }


    }
}

答案 2 :(得分:1)

inspace本质上是一个变量,表示您处于或未处于“刚看到的空间”状态。在看到空格后进入此状态,并在看到非空格时退出此状态。仅当您未处于inspace状态时才打印输入,因此不打印多个相邻空格。

我设法创建了一个完成此任务的程序,但它只使用了我创建的变量c,因此我理解了它的用途。 在你的程序中,如果输入是“hello world”,那它的确切输出是什么?您发布的程序将输出“hello world”(将单词之间的多个空格压缩为一个)。

答案 3 :(得分:0)

我也遇到了同样的问题,但是终于有了一个可以运行的程序。

    #include<stdio.h>

/* copy input to its output, replacing each
   string of one or more blanks by a single blank */

int main()
{
    int c, nspace=0;
    while((c=getchar()) != EOF){
        if(c==' ') ++nspace;
        else{
            if(nspace >= 1){
                printf(" ");
                putchar(c);
                nspace=0;
            }
            else
                putchar(c);
        }
    } 
            
}