Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 13.02.2011, 16:09   #1 (permalink)
thermite
Member
 
Аватар для thermite
 
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Стереть табуляцию и поставить нужное количество пробелов

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

#include <stdio.h>

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

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

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

if( c == '\t' )
{ if( c == EOF )
return 0;
c = getchar();
printf("\b%s", N);
}
if( c != '\t' )
printf("%c", c );
}
}
thermite вне форума   Ответить с цитированием

Старый 13.02.2011, 16:09
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На форуме уже не раз встречалось что то подобное, почитайте

Процедура удаления пробелов в строке
Отсутствует нужное разрешение экрана
Не могу выбрать нужное разрешение
Напишите функцию, преобразующую символы табуляции в последовательность из n пробелов

Старый 14.02.2011, 01:28   #2 (permalink)
thermite
Member
 
Аватар для thermite
 
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Я уже три часа в общем пытаюсь написать, все равно не пойму, в чем прокол!
thermite вне форума   Ответить с цитированием
Старый 14.02.2011, 17:41   #3 (permalink)
thermite
Member
 
Аватар для thermite
 
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Немного исправил, щас убираются табуляции, но нужное число пробелов не пытаюсь написать, потому как не старался, не получалось, но буду пробывать еще. Может кто что нибудь подскажет?
=====================
#include <stdio.h>

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


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

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

}

}
thermite вне форума   Ответить с цитированием
Старый 14.02.2011, 18:11   #4 (permalink)
thermite
Member
 
Аватар для thermite
 
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Теперь получилось сделать что хотел, но хотел я чтоб одну табуляция команды стерли, и поставили такое же количество пробелов! Если запустить еще, то при вводе текста нужно будет поставить табуляцию для основной команды этой программки, чтобы дождаться эффекта! ) Но если поставить больше одной табуляции, то следующие три символа пробела смещаются вправо, этому лекго убедиться скомпилировав и запуствив эту программку.
=============================================
Я щас проверю ее, напишу в ней цифры все однерки, а потом нажму enter, и снизу под строкой начну вводить символы с 0 по \n .
./a.out
thermite вне форума   Ответить с цитированием
Старый 14.02.2011, 18:13   #5 (permalink)
thermite
Member
 
Аватар для thermite
 
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Опа, я понел кое что, нужно учитывать сколько символов у табуляции, и сколько символом я да табуляции ввожу, тогда получится что нужно!
thermite вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 14.02.2011, 18:15   #6 (permalink)
thermite
Member
 
Аватар для thermite
 
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Следует Много чего стереть в написанном коде и пириписать программку, думаю если ты читаешь и понел что нужно внести в код, напиши! Буду очень рад!
thermite вне форума   Ответить с цитированием
Старый 14.02.2011, 21:55   #7 (permalink)
thermite
Member
 
Аватар для thermite
 
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Чувствую что разгадаю скоро этот прикол с табуляцией.
================================
#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(" "); // печатаем пробел;
}

}

}
}
thermite вне форума   Ответить с цитированием
Старый 15.02.2011, 03:32   #8 (permalink)
thermite
Member
 
Аватар для thermite
 
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

//==========Готово_задача_выполнена!================ =========
#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 );// Вывести символ.
//================================================== ==================
}
}
thermite вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 07:28.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.