Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/35: Рейтинг темы: голосов - 35, средняя оценка - 4.91
Net_Wanderer
235 / 208 / 29
Регистрация: 08.06.2011
Сообщений: 467
1

Заменить символы табуляции на пробелы

07.08.2011, 22:04. Просмотров 6715. Ответов 6
Метки нет (Все метки)

Вот
упражнение
Напишите программу detab, которая бы заменяла символы
табуляции во входном потоке соответствующим количеством пробелов до следующей границы
табуляции. Предположим, что табуляция имеет фиксированную ширину n
столбцов.
из The C Programming Language, я не пойму что нужно сделать, что такое граница табуляции? В голову приходит такое решение:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main()
{
    int n = 4;
    int c, i;
 
    while ((c = getchar()) != EOF) {
        if (c == '\t')
            for (i = 0; i < n; ++i)
                putchar(' ');
        else
            putchar(c);
    }
 
    return 0;
}
но чувствую что, что-то не так, слишком просто.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2011, 22:04
Ответы с готовыми решениями:

Удалить символы в строке, стоящие на четных местах; удалить лишние пробелы и знаки табуляции в строке, заменив одним пробелом
Надо удалить символы в строке, стоящие на четных местах. И удалить лишние пробелы и знаки табуляции...

Найти символы переноса строки в файле и заменить их на пробелы
Считываю байты из файла, нахожу символ переноса строки и заменяю его на пробелы, когда заношу всё в...

Лишние пробелы и табуляции
доброго времени суток! преподаватель говорил о расхождении значений i и j, после которого формула...

Убрать начальные и конечные пробелы и табуляции
Друзья, все вроде как работает, но хотелось бы услышать советы по оптимизации и придаче красоты...

Программа, удаляющая повторяющиеся пробелы и табуляции (работает некорректно)
Прошу помощи и детального ( по возможности разбора полетов ) Программа выводит строки где больше...

6
Jupiter
Каратель
Эксперт С++
6576 / 3997 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.08.2011, 22:06 2
похоже что граница табуляции это что что сразу идет за табуляцией), тобишь слово, символ, вообщем все что отлично от табуляции
1
castaway
Эксперт С++
4940 / 3045 / 455
Регистрация: 10.11.2010
Сообщений: 11,139
Записей в блоге: 10
Завершенные тесты: 1
07.08.2011, 22:32 3
Лучший ответ Сообщение было отмечено как решение

Решение

Табуляция - это отступ (выравнивание) от левой границы, т.е. табуляция размером в 8 символов, от трех (3-х) уже написанных знаков будет 5 и они будут выглядеть как пробелы.
Так принято, что по-умолчанию табуляция обычно равна восьми знакам отступа и имеет код 0x09 (размер отступа зависит от редактора),
так было принято уже давно.. Кстати подробнее можешь почитать вот тут: http://ru.wikipedia.org/wiki/%D2%E0%E1%F3%EB%FF%F6%E8%FF
А граница табуляции - это и есть отступ на 8 (или другое количество знаков) с выравниваем.
3
Net_Wanderer
235 / 208 / 29
Регистрация: 08.06.2011
Сообщений: 467
08.08.2011, 01:19  [ТС] 4
Цитата Сообщение от lazybiz Посмотреть сообщение
Кстати подробнее можешь почитать вот тут: http://ru.wikipedia.org/wiki/%D2%E0%...EB%FF%F6%E8%FF
Я бы не стал постить что-либо на форум не прочитав этого
---
Похоже я разобрался с механизмом табуляции:
Если разбить строку на символьные блоки, где кол-во символов будет равно количеству пробелов в табуляции, то когда мы ставим табулцию, она дописывает количество "пробелов" нужное для завершения уже начатого блока. Напрмер:
имеем строку из 15 симвлов, и tab из 8 пробелов,
если в конец этой строки поставить табуляцию, то она будет длиной в 1 пробел, потому что
один блок закончен, а во втором 7 символов и для его заполнения нужен еще один пробел.

Тогда в программе, при встрече \t, нужно сначала вычислить сколько "пробелов" добавляет данная табуляция , а затем заменять ее на соответствующее количество.
2
OstapBender
587 / 525 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
08.08.2011, 03:44 5
класс, не знал. мелочь а приятно.
0
AVATAR
9 / 9 / 6
Регистрация: 27.07.2014
Сообщений: 267
27.07.2014, 19:08 6
Ну в си же '\t' по умолчанию равен 4 ем символам ? Можете пояснить ?)
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 875
Записей в блоге: 1
28.07.2014, 05:28 7
Цитата Сообщение от AVATAR Посмотреть сообщение
Ну в си же '\t' по умолчанию равен 4 ем символам
Это кто вам такое сказал? И при чём здесь Си? В любом редакторе вы можете настроить табы хоть в 1 пробел. В Питоне принято использовать 4 пробела, но так то Питон. Перепишите свою функцию для произвольной длины таба, и всем будет хорошо.
1
28.07.2014, 05:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 05:28

Во вводимом с клавиатуры тексте удалить все пробелы, знаки табуляции
Нужно написать программу, которая во вводимом с клавиатуры тексте удалит все пробелы, знаки...

Написать программу, в которой функция будет убирает все лишние пробелы и табуляции в строке
Помогите написать программу,в которой функция будет убирает все лишние пробелы и табуляции в строке.

Преобразовать символы конца строки и табуляции в управляющие последовательности
Задание: написать функцию escape(s, t), которая бы преобразовывала символы наподобии конца строки и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru