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

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

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

вот написал прогу, которая убирает комментарий из текста в стиле /*... */ но есть 1 но, если в 1 строке несколько комментариев, то она убирает только первый... помогите доработать алгоритм, чтобы убирало все комментарии в строке
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
void comment(FILE*, FILE*,  const char* , const char*); 
void comment (FILE*in, FILE*out,const char *start, const char *finish)
{
    char str[256];
    char *c;
    char *l;
    int m,k,n,i, flag = 0;
    while(fgets(str,256,in)!=NULL)
    {
        c=strstr(str,start);
        l=strstr(str,finish);
        n=strlen(str);
        if (c!=NULL)
        {
            flag = 1;
            k=strlen(c);
            for (i=0;i<n-k;i++)
            {
                fprintf (out,"%c",str[i]);
            }
    }
    if (l!=NULL)
        {    
            m=strlen(l);
            flag = 0;
            for (i=n-m+2;i<n;i++)
            {
                fprintf (out,"%c",str[i]);
            }
        }
    
        if ((c==NULL) && (l==NULL)) 
        {
            if (flag == 0)
            {
                for (i=0;i<n;i++) 
                    {   
                        fprintf (out,"%c",str[i]);
                    }
            }
            else
            {
                fprintf(out, "\n");
            }
    }
    }
}

int main (void)
{
    FILE *in;
    FILE *out;
    char* finish = "*/";
    char* start = "/*";
    in = fopen ("input.txt","r");
    out = fopen ("output.txt","w");
    comment(in,out, start, finish);
    fclose(in);
    fclose(out);
    return 0;
}
ну подкиньте идейку, плз... не знаю как доработать

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

textual
Листинг программы
#include<iostream>
#include<conio.h>
using namespace std;
 
#define MAX_FILE_LENGHT 512
 
bool load_file(FILE *in, /*out*/ char *p)
{    
    int i = 0;
    while((*p = fgetc(in)) != EOF && i < MAX_FILE_LENGHT)
    {        
        ++i;
        ++p;
    }
    *p = '\0';
 
    if(i == MAX_FILE_LENGHT) {
        printf("Program Too Big");
        return false;
    }  
    return true;
}
 
 
void comment (FILE *in, FILE *out/*,const char *start, const char *finish*/)
{ 
    char prog[MAX_FILE_LENGHT+1];
 
    char *p;
 
    load_file(in, prog);
 
    p = prog;
 
    while(*p)
    {
 
        if(*p == '/' && *(p+1) == '*') 
        {
            p += 2;       
 
            while(!(*p == '*' && *(p+1) == '/'))
            {                
                if(!*p)
                {
                    printf("Ошибка!\nНет закрывающей пары(/*)");
                    _getch();
                    exit(-1);
                }
                p++;
            }
 
            p += 2;
        }
 
        fprintf(out,"%c",*p);
 
        p++;
    }
}
 
 
void main() 
{
    FILE *in;
    FILE *out;
 
    in = fopen ("input.txt","r");
    out = fopen ("output.txt","w");
    comment(in,out);
    fclose(in);
    fclose(out);
 
    printf(" OK! ");
    
    _getch();   
}

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


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

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

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