2011-06-17 40 views
-3

我想找到一種方法來壓縮空行。我目前的代碼是爲中間部分做的,但是在開始時它並不壓縮空行。我如何壓縮空行

CODE:

#include<stdio.h> 
#include<string.h> 
#include<ctype.h> 

int main (void) 
{ 
int c, space = 0, newline = 0; 

/*reads char by char til EOF*/ 
while((c = getchar()) != EOF) 
{ 

    if(c == '\t') 
    { 
     c = ' '; 
    } 

    if(c == ' ') 
    { 
     if(space == 0) 
     { 
      putchar(' '); 
      space = 1; 
     } 
    } 
    else if(c == '\n') 
    { 
     newline++; 

     if(newline <= 2) 
     { 
      putchar('\n'); 
     } 

    } 
    else 
    { 
     if(space == 1) 
     { 
      space = 0; 
     } 

     if(c != '\n') 
     { 
      newline = 0; 
     } 

     putchar(c); 
    } 
} 

return 0; 
} 

說我輸入:

[空白] [空白] [空白] 測試 [空白] [空白] [空白]

我想要的輸出是: [BLANK] test [BLANK]

我該如何更改我的代碼才能輸出正確的東西。

在此先感謝

PS:我使用I/O重定向進行測試。

編輯:忘了提,我使用Linux文本文件,所以它擺脫了/ R

編輯2:我已經在這裏上傳的輸出文件:

http://www.mediafire.com/?gtbjctbn2jjaxdo

+4

-1:你有沒有嘗試在調試器中逐句通過你的代碼? – 2011-06-17 00:09:56

+1

你可以給我們一個你的程序的I/O的例子,看看有什麼不工作? – 2011-06-17 00:10:39

+0

我會使用正則表達式 – 2011-06-17 00:11:12

回答

0

有時候文件使用\ r \ n而不是\ n,因此,您需要排除\ r。

+0

我將這些文件轉換爲unix格式,以便擺脫/ r – user798774 2011-06-17 05:39:31

0

我不明白你想用

if(newline <= 2) 
{ 
    putchar('\n'); 
} 

做你看到一個新行的第一,第二和第三次的東西,你把一個新的生產線。當然[空白] [空白] [空白]東西變成[空白] [空白] [空白]。

您應該嘗試將其重寫爲狀態機:它會更清楚您要做什麼,並且當您看到每個角色時,您將更清楚您需要做什麼。

此外,請考慮使用switch語句而不是所有的ifs。