Исключить из текста группы символов, расположенные между скобками - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста,как "Исключить из текста группы символов, расположенные между скобками ( , ). Сами скобки тоже должны быть исключены. Предполагается, что внутри каждой пары скобок нет других скобок." Буду очень благодарен,если вы напишете листинг с комментариями или без,хотя бы что-нибудь . Спасибо! Задание звучит так :
Начальный текст (5 - 10 строк по 30 - 40 символов) набрать в текстовом редакторе. Написать программу, позволяющую считать текст из файла, распечатать его, обработать строки в соответствии с вариантом задания. Результаты работы программы вывести на экран.

Дан текст, состоящий из слов и формул. Исключить из текста группы символов, расположенные между скобками ( , ). Сами скобки тоже должны быть исключены. Предполагается, что внутри каждой пары скобок нет других скобок.

Решение задачи: «Исключить из текста группы символов, расположенные между скобками»

textual
Листинг программы
#include <stdio.h>
#include <assert.h>
 
int main(int argc, char ** argv) {
    int c, flag;
    FILE * fin, * fout;
    
    if ( argc > 2 ) {
        fout = fopen(argv[2], "w");
        assert(fout);
    }
    else
        fout = stdout;
    
    if ( argc > 1 ) {
        fin = fopen(argv[1], "r");
        assert(fin);
    }
    else
        fin = stdin;
    
    flag = 0;
    while ( ( c = fgetc(fin) ) != EOF ) {
        if ( ! flag ) {
            if ( c == '(' )
                flag = 1;
            /*
            else
                fputc(c, fout);
             */
        }
        else {
            if ( c == ')' )
                flag = 0;
            else
                fputc(c, fout);
        }
    }
    
    return ( fclose(fin) | fclose(fout) );
}

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

  1. В коде представлен программа на языке C, которая предназначена для удаления из текста групп символов, расположенных между скобками.
  2. Для работы программы необходимо включить две библиотеки: stdio.h и assert.h.
  3. Программа принимает на вход один или два аргумента. Первый аргумент - это имя файла с исходным текстом, второй - имя файла, в который будет записан результат. Если аргументов больше двух, то второй аргумент не используется.
  4. Программа открывает файл для чтения и проверки на корректность.
  5. Если первый аргумент не передан, то в качестве исходного файла используется стандартный ввод.
  6. Если второй аргумент не передан, то в качестве выходного файла используется стандартный вывод.
  7. В программе выделяется буфер для хранения текущего символа.
  8. В цикле while считывается каждый символ из исходного файла до достижения конца файла.
  9. Если буфер пуст и считанный символ является открывающей скобкой, то в буфер записывается закрывающая скобка.
  10. Если буфер не пуст и считанный символ является закрывающей скобкой, то в буфер записывается открывающая скобка.
  11. Если буфер не пуст и считанный символ не является скобкой, то он записывается в выходной файл.
  12. Если буфер пуст и считанный символ не является скобкой, то он также записывается в выходной файл.
  13. После окончания чтения исходного файла, программа записывает в выходной файл оставшийся в буфере символ.
  14. Программа закрывает исходный и выходной файлы.
  15. Возвращаемое значение программы - это сумма кодов закрытия исходного и выходного файлов.
  16. Если во время работы программы происходит ошибка, то возвращаемое значение будет отличным от нуля.
  17. В коде присутствуют две комментарийные строки, которые предназначены для отладки программы.
  18. Программа не использует библиотеку stdlib.h, которая предназначена для работы с массивами и строками.
  19. Программа не использует библиотеку string.h, которая предназначена для работы со строками.
  20. Программа не использует библиотеку ctype.h, которая предназначена для работы с символами.

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


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

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

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