17.02.2011, 04:51 | #1 (permalink) |
Member
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Заменить пробелы на табуляцию
Напишите программу, которая бы заменяла пустые строки, состоящие из одних пробелов, строками, содержащими минимальное количество табуляций и дополнительных пробелов - так, чтобы заполнять то же пространство. Если для заполнения места до следующей границы табуляции требуется один пробел или один символ табуляции, то что следует предпочесть? ======================= Я написал код, уверен что в он ошибочный, тут же родилась идея сначала при встрече пробела присвоить вместо пробела табуляцию, а потом отсчитать сколько нужно затереть пробелов, это я еще не написал, а пока только в планах, может это самое верное решение, тогда код думаю станет намного компактней! Как думаете, что подскажете? Вот картинка и код. Код:
#include <stdio.h> int main() { int MAX = 8; // табуляция, максимальная величина пробелов. int MIN = 1; // табуляция, минимальная величина пробела. int n = 0; // счетчик каждого символа. char c; // присваивает символ входящего потока. int i = 0; // счетчик пробелов. while( ( c = getchar() ) != EOF ) // присвоить, пока входящий поток не встретил конец. { if( n == MAX ) // если счетчик символов равен границе табуляции, n = 0; // то обнулить счетчик. n++; // увеличить счетчик. if( c == ' ' ) // если встретился пробел. { i++; // увеличить счетчик пробелов. if( i == ( MAX - n ) ) // если граница табуляции состовляет один пробел, { c = '\t'; // то символу пробела присвоить табуляцию. i = 0; // обнулить счетчик пробелов. } if( i > MIN ) // если счетчик пробелов больше минимального числа пробелов в табуляции. if( ( i == ( MAX - n ) ) // И если пробелов достаточно для табуляции, { i = n; // то счетчику пробелов присвоим счетчик каждого символа. while( i < MAX ) // запустим цикл, пока не сотрем все пробелы, { printf("\b"); // сотрем пробелы backspace. i++; // увеличим счетчик пробелов. } c = '\t'; // а после присвоим символу табуляцию. } } } |
17.02.2011, 04:51 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Не стоит откладывать прочтение схожих тем Пробелы в MS Word Чем заменить пингование? Как заменить реле? |
17.02.2011, 07:48 | #2 (permalink) |
Member
Регистрация: 13.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Программисты, помогите же, я написал, только незнаю как проверить, думаю если вы посчитаете, что все верно, значит это так и есть. Вот заного написал, разумеется со всеми комментариями! В комментариях я писал больше для программы! )
Код:
#include <stdio.h> int main() { int MAX = 8; // максимальное число пробелов в табуляции. int MIN = 1; // минимальное число пробелов в табуляции. int n = 0; // высчитывает сколько в табуляции осталось пробелов. char c; // переменная принимает символ входного потока. int i = 0; // считает пробелы. int space = 0; // будет выполняться в цикле, пока на сравниться с количеством пробелов 'i'. while( ( c = getchar() ) != EOF ) // принимай входной поток до конца файла. { n++; // увеличь 'n' на один. if( n == MAX ) // если 'n' равна 8 символам, n = 0; // обнуляй. if( ( c == ' ' ) && ( ( MAX - n ) == MIN ) ) // если встретился пробел и в табуляции остался один пробел, c = '\t'; // то присвой 'c' табуляцию вместо пробела. if( ( c == ' ' ) && ( ( MAX - n ) != MIN ) && ( ( MAX - n ) != 0 ) ) // если встретился пробел и в табуляции осталось больше одного пробела, while( c == ' ' ) // то запусти цикл пока 'c' равна пробелу. { i++; // увеличь 'i' на один. c = getchar(); // получи следующий символ. n++; // увеличь 'n' на один. if( n == MAX ) // если 'n' равна 8 символам, n = 0; // обнуляй. if( ( c != ' ' ) && ( ( MAX - n ) == i ) ) // если 'c' не равна пробелу и табуляция схожа с количеством 'i' { while( space <= i ) // запусти цикл пока пробел не сравнялся с счетчиком. { printf("\b"); // сделай несколько backspace. space++; // увеличь 'space', чтобы сравнять с 'i'. } space = 0; // обнули 'space'. i = 0; // обнули 'i' printf("\t"); // напечатай табуляцию. } } printf("%c", c ); // покажи присвоенный символ! } } |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|