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