Напишите программу detab, заменяющую символы табуляции во вводимом тексте нужным числом пробелов - C (СИ)
Формулировка задачи:
Упражнение 1.20.
Перевод: Напишите программу detab, заменяющую символы табуляции во вводимом тексте нужным числом пробелов (до следующего "стопа" табуляции). Предполагается, что "стопы" табуляции расставлены на фиксированном расстоянии друг от друга, скажем, через n позиций. Как лучше задавать n - в виде значения переменной или в виде именованной константы?
Оригинал: Write a program detab that replaces tabs in the input with the proper number of blanks to space to the next tab stop. Assume a fixed set of tab stops, say every n columns. Should n be a variable or a symbolic parameter?
Обьясните, пожалуйста, условие задачи простым языком, если можно с картинками. Что есть "стоп" табуляции?
Решение задачи: «Напишите программу detab, заменяющую символы табуляции во вводимом тексте нужным числом пробелов»
textual
Листинг программы
#include <stdio.h> //библиотека ввода-вывода #include <cstdlib> //библиотека задержки экрана (system) #include <iostream> #include <cstdio> #include <conio.h> #define TAB 8 int main() { setlocale(LC_ALL, "rus"); //Ввод/вывод русских символов int c, i,j, n,m; char massiv[TAB]; for (i = 0; i < TAB; i++) massiv[i] = '0'; //ОБНУЛЕНИЕ МАССИВА n = 0, m=0; while (((c=getchar())!=EOF) && (c!='\n')) { n++; if (massiv[TAB - 1] != '0') //ЕСЛИ МАССИВ ЗАПОЛНЕН, ВЫВОДИМ И ОБНУЛЯЕМ { printf("%s", massiv); m = 0; for (i = 0; i < TAB; i++) massiv[i] = '0'; } if (c != '\t' && m >= 0) //ЕСЛИ СИМВОЛ НЕ 'TAB' { m++; massiv[m-1] = c; } else if (m > 0) //ЕСЛИ СИМВОЛ 'TAB' for (i = m; i < TAB; i++) massiv[i] = '|'; } for (i = 0; i < TAB && massiv[i]!='0'; i++) //ВЫВОД СИМВОЛОВ ОКОНЧАНИЯ МАССИВА printf("%c", massiv[i]); printf("\n"); system("PAUSE"); return 0; }
Объяснение кода листинга программы
- Включаются необходимые библиотеки для работы с вводом-выводом, задержкой экрана и символами русских языков.
- Определяется константа TAB, равная 8.
- Устанавливается локальная настройка вывода русских символов.
- Объявляются необходимые переменные: c - для хранения вводимого символа; i, j - для работы с массивом; n - для подсчета количества введенных символов; m - для подсчета количества пробелов, которые нужно добавить.
- Создается массив massiv размером TAB, заполненный символами '0'.
- В цикле while считываются символы из стандартного ввода до конца строки или до символа новой строки.
- Если массив massiv заполнен (массив заполняется при каждой новой табуляции), выводится его содержимое, обнуляется счетчик m и символы табуляции заменяются на символы '|'.
- Если считанный символ не является табуляцией и счетчик m больше 0, увеличивается значение счетчика m и в массив massiv записывается считанный символ.
- Если считанный символ является табуляцией и счетчик m больше 0, все символы в массиве massiv, начиная с позиции m, заменяются на символы '|'.
- После окончания ввода выводится содержимое массива massiv.
- Вызывается функция system(
PAUSE
) для приостановки работы программы до нажатия клавиши. - Возвращается 0, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д