簡體   English   中英

C 編程語言 K&R 練習 1-9

[英]The C Programming Language K&R exercise 1- 9

我是這里的新手,一般來說對編程邏輯比較陌生。 為了提高我的技能,我開始閱讀這篇精美的文學作品。 我真的覺得我很好地掌握了這些概念,但這個練習似乎讓我措手不及。 我可以制作程序,但我看到的一些示例似乎介紹了本書尚未涵蓋的一些概念,例如此處的示例。 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,因此我了解它的用途。

這段代碼的目的是復制文本,如果有多個空格' '連續只打印一個空格。

變量inspace用於跟蹤上次打印的字符是 scape 還是非空格。
如果inspace為零意味着打印的字符不是空格。
如果inspace是 one 表示最后一次打印空間。

因此,如果下一次inspace為零,則可以在讀取 scape 時打印 scape,如果inspace為 1,則找到下一個連續的 scape,因此不打印空間。

請參閱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);
}

花了我一段時間,但這是我認為的答案。

#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);
        }


    }
}

inspace本質上是一個變量,用於指示您是否處於“剛剛看到一個空間”狀態。 看到空格就進入這個狀態,看到非空格就退出這個狀態。 僅當您不處於inspace狀態時才打印您的輸入,因此您不會打印多個相鄰的空格。

我設法創建了一個完成此任務的程序,但它僅使用了我創建的變量 c,因此我了解它的用途。 在您的程序中,如果輸入是“hello world”,那是它的確切輸出嗎? 您發布的程序將輸出“hello world”(將單詞之間的多個空格壓縮為一個)。

我也遇到了同樣的問題,但最終得到了一個有效的程序。

    #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);
        }
    } 
            
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM