Страницы

Translate

суббота, 20 июля 2013 г.

Упражнение 1.21. Напишите программу entab, заменяющую строки из пробелов минимальным числом табуляций и пробелов

Упражнение 1.21. Напишите программу entab, заменяющую строки из пробелов минимальным числом табуляций и пробелов таким образом, чтобы вид напечатанного текста не изменился. Используйте те же "стопы" табуляции, что и в detab. В случае, когда для выхода на очередной "стоп" годится один пробел, что лучше — пробел или табуляция?( Я думаю лучше пробел).


/*entab*/

#include <stdio.h>
#define TAB 8

int main()
{
    int c, ntab, nspace, symv;
    
    symv=1;
    ntab=0;//табуляции
    nspace=0;//пробелы
    while((c=getchar()) != EOF)
    {
        symv++;
        if(c==' ')
        {
            if(symv%TAB==0)
            {
                ntab++;
                nspace=0;
            }
            else
                nspace++;
        }
        else
        {
             while(ntab>0)
            {
                putchar('\t');
                ntab--;
            }
            if(c=='\t')
            {
                nspace=0;
                putchar('\t');
                symv=symv+(TAB-(symv%TAB));
            }
            else
            {
                while(nspace>0)
                {
                    putchar(' ');
                    nspace--;
                }
                putchar(c);
                if(c=='\n')
                {
                    symv=0;
                    ntab=0;
                    nspace=0;
                }
            }
        }
    }
    return 0;
}


Результат:




1 комментарий:

  1. У меня получилось проще:
    #include

    int main()
    {
    int c;
    int space = 0;
    while((c = getchar()) != EOF){
    if(c == ' ' && space == 0){
    ++space;
    putchar('\t');
    }
    if(c != ' '){
    space = 0;
    putchar(c);
    }
    }
    return 0;
    }

    Всем удачи!

    ОтветитьУдалить