13.02.2011, 16:09 | #1 (permalink) |
Member
Регистрация: 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 ); } } |
13.02.2011, 16:09 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
На форуме уже не раз встречалось что то подобное, почитайте Процедура удаления пробелов в строке Отсутствует нужное разрешение экрана Не могу выбрать нужное разрешение Напишите функцию, преобразующую символы табуляции в последовательность из n пробелов |
14.02.2011, 17:41 | #3 (permalink) |
Member
Регистрация: 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 ); } } |
14.02.2011, 18:11 | #4 (permalink) |
Member
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Теперь получилось сделать что хотел, но хотел я чтоб одну табуляция команды стерли, и поставили такое же количество пробелов! Если запустить еще, то при вводе текста нужно будет поставить табуляцию для основной команды этой программки, чтобы дождаться эффекта! ) Но если поставить больше одной табуляции, то следующие три символа пробела смещаются вправо, этому лекго убедиться скомпилировав и запуствив эту программку.
============================================= Я щас проверю ее, напишу в ней цифры все однерки, а потом нажму enter, и снизу под строкой начну вводить символы с 0 по \n . ./a.out |
14.02.2011, 18:13 | #5 (permalink) |
Member
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Опа, я понел кое что, нужно учитывать сколько символов у табуляции, и сколько символом я да табуляции ввожу, тогда получится что нужно!
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
14.02.2011, 21:55 | #7 (permalink) |
Member
Регистрация: 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(" "); // печатаем пробел; } } } } |
15.02.2011, 03:32 | #8 (permalink) |
Member
Регистрация: 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 );// Вывести символ. //================================================== ================== } } |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|