我如何压缩空白行

时间:2011-06-17 00:08:17

标签: c

我正在尝试找到压缩空行的方法。我当前的代码是为中间部分执行的,但在开始时它不压缩空行。

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

说我输入:

[空白] [空白] [空白] 测试 [空白] [空白] [空白]

我希望输出为: [空白] 测试 [空白]

如何更改我的代码以便输出正确的内容。

提前致谢

PS:我正在使用I / O重定向来测试它。

编辑:忘了提到我使用linux文本文件,所以它摆脱了/ r

编辑2:我在这里上传了输出文件:

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

2 个答案:

答案 0 :(得分:0)

有时文件使用\ r \ n而不是\ n,所以,你要排除\ r。

答案 1 :(得分:0)

我不明白你想用

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

第一次,第二次和第三次看到一个新行,你就换了一行。当然[BLANK] [BLANK] [BLANK]的东西变成[BLANK] [BLANK] [BLANK]的东西。

你应该尝试将其重新编写为状态机:你会更清楚你想要做什么,当你看到每个角色时你会更清楚你需要做什么。

此外,请考虑使用switch语句而不是所有ifs。