Напишите программу 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;
}

Объяснение кода листинга программы

  1. Включаются необходимые библиотеки для работы с вводом-выводом, задержкой экрана и символами русских языков.
  2. Определяется константа TAB, равная 8.
  3. Устанавливается локальная настройка вывода русских символов.
  4. Объявляются необходимые переменные:   c - для хранения вводимого символа;   i, j - для работы с массивом;   n - для подсчета количества введенных символов;   m - для подсчета количества пробелов, которые нужно добавить.
  5. Создается массив massiv размером TAB, заполненный символами '0'.
  6. В цикле while считываются символы из стандартного ввода до конца строки или до символа новой строки.
  7. Если массив massiv заполнен (массив заполняется при каждой новой табуляции), выводится его содержимое, обнуляется счетчик m и символы табуляции заменяются на символы '|'.
  8. Если считанный символ не является табуляцией и счетчик m больше 0, увеличивается значение счетчика m и в массив massiv записывается считанный символ.
  9. Если считанный символ является табуляцией и счетчик m больше 0, все символы в массиве massiv, начиная с позиции m, заменяются на символы '|'.
  10. После окончания ввода выводится содержимое массива massiv.
  11. Вызывается функция system(PAUSE) для приостановки работы программы до нажатия клавиши.
  12. Возвращается 0, что означает успешное завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы