Как мне сжать пустые строки - PullRequest
0 голосов
/ 17 июня 2011

Я пытаюсь найти способ сжатия пустых строк. Мой текущий код делает это для средней части, но в начале он не сжимает пустые строки.

КОД:

#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] [BLANK] [BLANK] тестовое задание [BLANK] [BLANK] [BLANK]

Я хочу вывод: [BLANK] тестовое задание [BLANK]

Как мне изменить мой код, чтобы он выводил правильные вещи.

Заранее спасибо

PS: я использую перенаправление ввода / вывода для проверки.

РЕДАКТИРОВАТЬ: забыл упомянуть, что я использую текстовые файлы Linux, чтобы он избавился от / r

РЕДАКТИРОВАТЬ 2: Я загрузил выходной файл здесь:

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

Ответы [ 2 ]

0 голосов
/ 09 ноября 2011

Я не понимаю, что вы пытаетесь сделать с

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

Первый, второй и третий раз, когда вы видите новую строку, вы ставите новую строку.Конечно, [ПУСТОЙ] [ПУСТОЙ] [ПУСТОЙ] вещь становится [ПУСТОЙ] [ПУСТОЙ] [ПУСТОЙ].

Вы должны попробовать переписать это как конечный автомат: будет более понятно, кто выпытаясь сделать, и вам будет более понятно, что вам нужно делать, когда вы видите каждого персонажа.

Далее, рассмотрите возможность использования оператора switch вместо всех if.

0 голосов
/ 17 июня 2011

Иногда файлы используют \ r \ n вместо \ n, поэтому вы хотите исключить \ r.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...