• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Стереть табуляцию и поставить нужное количество пробелов

thermite

Новые
Регистрация
13 Фев 2011
Сообщения
23
Реакции
0
Баллы
0
Стереть табуляцию и поставить нужное количество пробелов

Всем привет, такая вот легкая задачка мне встретилась, не могу понять что не так, вот задание и исходник.
========
Напишите программу detab, которая бы заменяла символы табуляции во входном потоке соответствующим количеством пробелов до следующей границы табуляции. Предположим, что табуляция имеет фиксированную ширину n столбцов. Следует ли сделать n переменной или символическим параметром?
========

#include <stdio.h>

char N[5];
char c;
int i;

int main()
{
for( i = 0; i != 5; i++)
{
N = ' ';
}

while( ( c = getchar() ) != EOF )
{

if( c == '\t' )
{ if( c == EOF )
return 0;
c = getchar();
printf("\b%s", N);
}
if( c != '\t' )
printf("%c", c );
}
}
 
Я уже три часа в общем пытаюсь написать, все равно не пойму, в чем прокол!
 
Немного исправил, щас убираются табуляции, но нужное число пробелов не пытаюсь написать, потому как не старался, не получалось, но буду пробывать еще. Может кто что нибудь подскажет?
=====================
#include <stdio.h>

char N[6];
char c;
int i;


int main()
{
for( i = 0; i != 6; ++i)
{
N = ' ';
}

while( ( c = getchar() ) != EOF )
{
// printf("%c", c );
if( c == '\t' )
{ while( c == '\t')
{
c = getchar();
if( c != '\t' )
printf(" \b");
}
}
printf("%c", c );

}

}
 
Теперь получилось сделать что хотел, но хотел я чтоб одну табуляция команды стерли, и поставили такое же количество пробелов! Если запустить еще, то при вводе текста нужно будет поставить табуляцию для основной команды этой программки, чтобы дождаться эффекта! ) Но если поставить больше одной табуляции, то следующие три символа пробела смещаются вправо, этому лекго убедиться скомпилировав и запуствив эту программку.
=============================================
Я щас проверю ее, напишу в ней цифры все однерки, а потом нажму enter, и снизу под строкой начну вводить символы с 0 по \n .
./a.out
 
Опа, я понел кое что, нужно учитывать сколько символов у табуляции, и сколько символом я да табуляции ввожу, тогда получится что нужно!
 
Следует Много чего стереть в написанном коде и пириписать программку, думаю если ты читаешь и понел что нужно внести в код, напиши! Буду очень рад!
 
Чувствую что разгадаю скоро этот прикол с табуляцией.
================================
#include <stdio.h>
int tab = 8; // количество пробелов в табуляции;
int main()
{
char c; // считывает символ до конца файла;
int i = 0; // счетчик символов без табуляции;
int m; // результат нужных пробелов с вычетом tab - i;
int n = 0; // счетчик пробелов вместо таb;
while( ( c = getchar() ) != EOF ) // считывает символ до конца файла;
{
if( c != '\t' ) // если читаемый символ не табуляция
i++; // то увеличим счетчик;
printf("%c", c );// напечатать символ;

if( c == '\t' ) // Если встретилась табуляция
while( c == '\t' ) // то запустим цикл, пока символ равен табуляции;
{
printf("\b"); // выполняется backspace;
m = tab - i; // узнаем сколько пробелов осталось у tab;
while( n <= m ) // запускаем цикл;
{
n++; // увеличиваем пробел;
printf(" "); // печатаем пробел;
}

}

}
}
 
//==========Готово_задача_выполнена!=========================
#include <stdio.h>

int main()
{
//====================================================================
char c; // переменная считывающая каждый символ во входном потоке.
int index = 0; // С каждым увеличением, будет точно известно, сколько нужно пробелов для замены '\t'.
int MAX = 8;// максимальное число в табуляции.
int result = 0;// если один, то была замена табуляции.
//====================================================================
while( ( c = getchar() ) != EOF ) // считываем символ до конца файла.
{
result = 0;// присвоим 0
//====================================================================
if( c == '\n' || c == '\0' )//Если конец строки
{
printf("\n"); //выполняем конец строки.
return 0; // выход из программы с удачным завершением.
}
//====================================================================
if ( c != '\t' ) //Если 'c' не равна табуляции
index++;// увеличим счетчик.
//====================================================================
if( c == '\t' )// Если 'c' равна табуляции
{
while( index < MAX )// Выполнять пока index меньше MAX
{
printf("%c", c = ' ' ); // Заменяем 'c' вместо табуляции на пробел, и так
index++; // пока index меньше MAX.
}
result = 1;// присвоить один - была табуляция.
index = 0;// счетчик установить в начальное положение.
}
//====================================================================
if( index != MAX && result == 0)// Если 'c' не присвоило табуляцию.
printf("%c", c );// Вывести символ.
//====================================================================
}
}
 
Назад
Сверху