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

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

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

Помогите пожалуйста! Написать программу удаляющую все комментарии вида <!--...--> включая многострочные, а так же при условии что в одной строке может быть несколько комментариев.

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

textual
Листинг программы
#include <stdio.h>
 
int main() {
    const char *strings[2] = {"<!--", "-->"};
    FILE *fIn = fopen("in.txt", "r");
    if (!fIn) {
        fprintf(stderr, "Error opening input file");
        return 1;
    }
    FILE *fOut = fopen("out.txt", "w");
    if (!fOut) {
        fprintf(stderr, "Error opening output file");
        return 1;
    }
 
    char buf[4];
    unsigned isInside = 0, searchPos = 0, bufSize = 0;
    int c;
    while ((c = getc(fIn)) != EOF) {
        buf[bufSize++] = c;
        if (c == strings[isInside][searchPos]) {
            searchPos++;
            if (strings[isInside][searchPos] == '\0') {
                isInside = !isInside;
                searchPos = bufSize = 0;
            }
        } else {
            if (!isInside) {
                if (fwrite(buf, 1, bufSize, fOut) != bufSize) {
                    fprintf(stderr, "Error writing output file");
                    return 1;
                }
            }
            bufSize = 0;
        }
    }
    if (ferror(fIn)) {
        fprintf(stderr, "Error reading input file");
        return 1;
    }
    fclose(fIn);
    fclose(fOut);
}

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

  1. Программа открывает два файла: исходный файл для чтения и результирующий файл для записи.
  2. В программе определён массив из двух строк, указывающих на комментарии, которые нужно удалить.
  3. Используется цикл while для чтения каждого символа из исходного файла.
  4. Если текущий символ совпадает с текущим символом в строке комментария, то программа переходит к следующему символу в строке комментария.
  5. Если текущий символ не является частью строки комментария, то программа записывает этот символ в результирующий файл.
  6. Если программа встречает символ новой строки в строке комментария, то она начинает новый фрагмент кода, записывая символы в результирующий файл.
  7. Если программа встречает символ конца строки в строке комментария, то она записывает все оставшиеся символы в результирующий файл.
  8. Если программа встречает символ конца файла в строке комментария, то она записывает все оставшиеся символы в результирующий файл.
  9. Если программа встречает ошибку чтения из исходного файла, то она выводит сообщение об ошибке и завершает работу с кодом ошибки.
  10. Программа закрывает исходный файл и результирующий файл.
  11. Программа завершается без ошибок, если все комментарии успешно удалены.

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


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

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

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