Страницы

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

понедельник, 18 марта 2019 г.

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

Есть задачка, на входе дан текст (код программы с комментариями типа /*коммент*/). Нужно вырезать из этого текста комментарии и вернуть. Вот мой пример, но он не работает. Как его можно исправить ?:D
#define L 300
int main() {
char s1[L]; // Входной текст char s2[L]; // Выходной текст
int fl = 0;

printf("Введите исходный текст (макс %d симв.):
", L); gets(s1); printf("Начальный текст:
"); puts(s1); strcpy(s2,"");
int i = 0; while(i 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("Выходной текст:
"); puts(s2);
system("pause");
}


Ответ

Странный кусок, что вы хотели здесь сделать?
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
", s ); } free( s ); return !s; }

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

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