суббота, 18 января 2014 г.

Упражнение 1.18.

Перевод: Напишите программу, которая будет в каждой вводимой строке заменять стоящие подряд символы пробелов и табуляций на один пробел и удалять пустые строки.

Оригинал: Write a program to remove trailing blanks and tabs from each line of input, and to delete entirely blank lines.

$ vim ex_1_18_5.c
#include <stdio.h>

#define MAXLINE 1000

/* Программа удаляет все завершающие пробелы и табуляции */

int getstr(char s[], int maxline);

int main(void)
{
    int len, i;
    char line[MAXLINE];

    while ((len = getstr(line, MAXLINE)) > 0)
    {
        /* для исключения символа '\0' */
        len = len - 1;

        printf("Длина строки %d символа(-ов)\n", len);
        for (i = len - 1; i >= 0; --i)
            if (line[i] == ' ' || line[i] == '\t')
                len = len - 1;
            else
                i = 0;

        for (i = 0; i < len; ++i)
            printf("%c", line[i]);
        printf("\n");

        printf("Длина строки без завершающих ее пробелов и табуляций %d\n", i);
    }

    return 0;
}

int getstr(char s[], int lim)
{
    int c, i;

    for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
    {
        s[i] = c;
    }
    if (c == '\n')
    {
        s[i] = c;
        i++;
    }
    s[i] = '\0';
    return i;

}

$ cc -g -O0 -Wall -o a.out ex_1_18_5.c
$ ./a.out
Hello<Space><Tab><Space><Enter>
Длина строки 8 символа(-ов)
Hello
Длина строки без завершающих ее пробелов и табуляций 5

Комментариев нет:

Отправить комментарий