讀書筆記之:C程式設計語言

來源:互聯網
上載者:User

標籤:

第一章的一道練習題,開始無論如何都理解不了這道題的意思,直到用VS一步一步的調試著看:

???? 1-21:

編寫程式entab,將空格串替換為最少數量的空格和定位字元,但要保持單詞之間的間隔不變。假設定位字元終止位的位置為8(#define TABINC 8)。當使用一個定位字元或者一個空格都可以到達下一個定位字元終止位的時,選用哪一種替換字元較好?

 

 

例如:hello         world

  hello和world之間有9個空格,這個列印的時候,先列印出hello,然後遇到了第一個空格,此時pos = 6,且pos不在定位字元終止位上,所以nb++;

  直到pos = 8 = TABINC時,令nb = 0,nt++,既是將hello後的三個空格換成一個tab。

  從pos = 9到pos = 15之間的六個空格,還是六個空格,不做改變。

  隨後列印出world,程式結束。

 

 如:he  is    a          boy

  he後是一個tab,is後一個tab和兩個空格,a後8個空格一個tab。

  當pos =3時,遇到第一個tab,令nb = 0,然後根據公式:pos = pos+(TABINC-(pos-1)%TABINC)-1得出pos=8,既是直接列印一個定位字元,並跳到     TABINC處。

  接著列印出is。

  pos=11時遇到tab,由公式得出pos=16,跳到第二個TABINC處。

  列印完兩個空格後遇到a,pos=19。

  a後列印了五個空格後到了第三個TABINC,於是nb = 0,nt++,此時pos=24。

  後邊三個空格,列印完後pos=28,遇到\t,於是將之前積累的定位字元和當前遇到的這個定位字元列印出來。

  最後列印出boy,程式結束。

  

 

 1 #include <stdio.h> 2 #define TABINC 8 3 //將空格串替換成最少數量的定位字元和空格,但要保持單詞之間的間隔不變 4 int main(int argc,char* argv[]) 5 { 6     int c,nb,nt,pos; 7      8     nb = 0; 9     nt = 0;10     for(pos = 1;(c = getchar())!=EOF;++pos)11     {12         if(c == ‘ ‘)13         {14             if(pos % TABINC != 0)15             {16                 ++nb;17             }else18             {19                 nb = 0;20                 ++nt;    21             }22         }else {23             for (;nt>0;--nt) {24                 putchar(‘\t‘);25             }26             if(c == ‘\t‘)27                 nb = 0;28             else29                 for(;nb>0;--nb)30                     putchar(‘ ‘);31             putchar(c);32             if(c == ‘\n‘)33                 pos = 0;34             else if (c == ‘\t‘) {35                 pos = pos + (TABINC - (pos - 1) % TABINC) - 1;36             }                37             38         }39     }40 }
entab

 

程式主要是要將全部的空格找出。然後當pos遞增到一個TABINC的倍數的時候,就把空格串替換成一個定位字元。

遇到非空白字元時,程式先將遇到這個字元之前的所有空格和定位字元列印出來後,再列印這個字元。

若當前字元是一個分行符號,則注意重新將pos值設為1.

當遇到一個定位字元時程式只需將此前積累的定位字元和當前遇到的這個定位字元列印出來。

如果只需一個空格就能到達下一個製表位,我們選擇把他替換成一個定位字元,因為這有助於避免特殊情況。

讀書筆記之:C程式設計語言

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.