Удаление комментариев из файла - C (СИ)

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

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

есть набросок функции, которая удаляет из файла все комментарии(с поддержкой многострочности.). помогите исправить ошибки и правильно реализовать.
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
 
int DelComments()
{
int i=0;
int c;
char *string=(char*)malloc(256);
scanf("%s", string);
while(true)
{
if ((strstr(string, "{"))&&(strstr(string, "}")))
{ int StartComment=strstr(string, "{")-string;
for (i=(strstr(string, "}")-string)+1; i<=strlen(string); i++)
{ string[StartComment]=string[i];
StartComment++;
}
else
{
breake;
}
return 1
}
}
}

Решение задачи: «Удаление комментариев из файла»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <process.h>
 
int main(int argc, char* argv[])
{
    FILE *fi,*fo;
 
    char finp[256];
    char fout[256];
 
    char c,p;
    int sig_comm;
 
    strcpy(finp,argv[1]);
    strcpy(fout,argv[2]);
 
    if ((fi=fopen(finp,"r")) == NULL)
    {
        printf("File %s not found!\n",finp);
        exit(-1);
    }
 
    if ((fo=fopen(fout,"w")) == NULL)
    {
        printf("File %s cannot be opened!\n",finp);
        exit(-1);
    }
 
    p=fgetc(fi);
    sig_comm=0;
 
    while (1)
    {
        c=fgetc(fi);
 
        if (c==EOF) break;
 
        if ((sig_comm == 0) && (c == '*') && (p == '/')) 
        {
            fseek(fo,-1L,SEEK_END);
            sig_comm=1;
        }
        
        if (sig_comm == 0) {fputc(p,fo); printf("%c",p);}
    
 
        if ((sig_comm == 1) && (c == '/') && (p == '*')) 
        {
            c=fgetc(fi);
            sig_comm=0;
        }
        
        p=c;
        
    }
 
    if (sig_comm == 0) fputc(p,fo);
 
    fclose(fi);
    fclose(fo);
 
    return 0;
}

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

  1. Включаются необходимые заголовочные файлы: stdio.h, string.h, process.h
  2. Определяются основные переменные: — fi - указатель на файл для чтения — fo - указатель на файл для записи — finp - массив для хранения имени исходного файла — fout - массив для хранения имени результирующего файла — c - текущий символ из исходного файла — p - предыдущий символ из исходного файла — sig_comm - флаг, определяющий наличие комментария
  3. Копируются имя исходного файла и имя результирующего файла в соответствующие переменные
  4. Открываются исходный и результирующий файлы для чтения и записи соответственно
  5. Если файл для чтения не может быть открыт, выводится сообщение об ошибке и программа завершается
  6. Если файл для записи не может быть открыт, выводится сообщение об ошибке и программа завершается
  7. Устанавливаются начальные значения для циклов чтения файла
  8. В цикле чтения файла: — Если достигнут конец файла (EOF), цикл прерывается — Если текущий символ равен '' и предыдущий символ равен '/', то удаляется последний символ из результирующего файла — Если текущий символ не является комментарием, он записывается в результирующий файл и выводится на экран — Если текущий символ равен '/' и предыдущий символ равен '', то продолжается чтение файла
  9. Если после цикла остались символы в исходном файле, они записываются в результирующий файл
  10. Закрываются исходный и результирующий файлы
  11. Программа возвращает 0, что означает успешное выполнение

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


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

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

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