Упражнение 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;
}
Результат:
У меня получилось проще:
ОтветитьУдалить#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;
}
Всем удачи!