LINUX.ORG.RU

учусь!


0

0

привет,
у Керигана с Ричи в учебной главе есть упражнение 1.7:
"Напишите программу, которая копирует ввод на вывод,
заменяя при этом каждую последовательность из одного
или более пробелов на один пробел"

я ломал голову всю субботу и вот что сегодня утром придумал:
----------
/* ms2os.c - программка замены двух и более пробелов подряд
* на стандартном вводе на один пробел в стандартном выводе */
#include <stdio.h>
#define EOF -1
main()
{
int c, d, ns;
ns = d = 0;
while ((c = getchar()) != EOF) {
if (c == 32)
++ns;
if (c != 32)
ns = 0;
if (ns > 1)
c = '\0';
putchar(c);
}
}

что интересно - оно работает!
Но есть смутные сомнения - а может что-то сделано не по правилам или не рационально? Можно ли считать, что я верно решил упражнение? Или надо было его решить по другому?
Подскажите пож все ли у меня верно.. Не дайте умереть будущему Коксу-2.. :)

anonymous

сделано, безусловно, неправильно. Она просто пытается вывести \0 вместо последующих пробелов. можно сделать десятком способов, проще всего заменить

if (ns > 1) c = '\0'; putchar(c);

на

if (ns < 2) putchar(c);

anonymous
()

понял..
thnx..

:(

anonymous
()

#include <stdio.h>

int main()
{
    int cur, prev = 0;

    while ((cur = getchar()) != EOF)
    {
        if (cur != ' ' || prev != ' ')  putchar(cur);
        prev = cur;
    }

    return ferror(stdin) != 0;
}

nobody ★★
()
Ответ на: комментарий от nobody

не.. я операции || и && тогда еще не прошел..
они появилось в упражнении 1-10, 1-11.. :))

шас пытаюсь уже "Массивы" осознать.. :)

schoolboy
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.