c++ – Cut comments from program text

Question:

There is a problem, the input is a text (program code with comments like /*коммент*/ ). You need to cut comments from this text and return. Here's my example, but it doesn't work. How can I fix it?: D

#define L 300

int main() {

    char s1[L]; // Входной текст 
    char s2[L]; // Выходной текст

    int fl = 0; 



    printf("Введите исходный текст (макс %d симв.): \n", L);
    gets(s1);
    printf("Начальный текст: \n");
    puts(s1);
    strcpy(s2,"");

    int i = 0;
    while(i<strlen(s1)) {


        if (s1[i] == '/' && s1[i+1] == '*') fl = 1;
        if (s1[i] == '*' && s1[i+1] == '/') fl = 0;

        if (fl == 0) {
            int j = 0;
            strcat(s2, &s1[j]);
            j++;
        } 
        i++;
    }

    printf("Выходной текст: \n");
    puts(s2);


    system("pause");

}

Answer:

Weird piece, what did you want to do here?

if (fl == 0) {
    int j = 0;
    strcat(s2, &s1[j]);
    j++;
} 

P.S.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char CMT_START[] = "/*";
const char CMT_END[]   = "*/";

static char *remove_comments( const char *string )
{
    char *cmt;
    const char *sptr = string;
    char *copy = malloc( strlen( string ) + 1 );

    if( !copy ) {
        return NULL;
    }
    *copy = 0;

    while( cmt = strstr( sptr, CMT_START ) ) {
        strncat( copy, sptr, cmt - sptr );
        cmt = strstr( cmt + 1, CMT_END );

        if( cmt ) {
            sptr = cmt + sizeof( CMT_END ) - 1;
        }
        else
        {
            /* Спорный момент: оставлять в строке незавершённый
             * комментарий или нет. В данном случае он будет
             * отброшен.
             */
            return copy;
        }
    }

    if( *sptr ) {
        strcat( copy, sptr );
    }

    return copy;
}

int main()
{
    char *s = remove_comments( "123 /* 456 */ 789 /* 098 */ abc /*" );
    if( s ) {
        printf( "%s\n", s );
    }
    free( s );
    return !s;
}
Scroll to Top