Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Вырезать из текста программы комментарии

#cpp


Есть задачка, на входе дан текст (код программы с комментариями типа /*коммент*/).
Нужно вырезать из этого текста комментарии и вернуть. Вот мой пример, но он не работает.
Как его можно исправить ?: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


Ответы

Ответ 1



Странный кусок, что вы хотели здесь сделать? if (fl == 0) { int j = 0; strcat(s2, &s1[j]); j++; } P.S. #include #include #include 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; }

Комментариев нет:

Отправить комментарий