#include <stdio.h>
void ignore_string(char*& s, char*& p, char c);
char* remove_comments(char* s);
int main(void){
char s[] =
R"xXx(
int main() {
//int\
int x;
}
)xXx";
puts( remove_comments(s) );
return 0;
}
//удаление комментариев за один проход с затиранием
char* remove_comments(char* s){
char* i, *t = s;
for(char* p = s; *s; *s = *p){
if((*p == '"') || (*p == '\''))
ignore_string(s, p, *p);
else if((*p == '/') && (*(p + 1) == '/')){ //однострочные комментария
i = p + 2;
while(*i && (*i != '\r') && (*i != '\n'))
++i;
p = i;
} else if((*p == '/') && (*(p + 1) == '*')){ //многострочные комментарии
i = p + 2;
while(*i){
if((*i == '*') && (*(i + 1) == '/')){
i += 2;
break;
}
++i;
}
p = i - 1;
*p = ' ';
} else
++s, ++p;
}
return t;
}
//пропуск
void ignore_string(char*& s, char*& p, char c){
char* i = p + 1;
while(*i && (*i != c)){
if(*i == '\\'){
if(! *++i)
break;
}
++i;
}
if(*i == c)
++i;
while(p != i)
*s++ = *p++;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CnZvaWQgaWdub3JlX3N0cmluZyhjaGFyKiYgcywgY2hhciomIHAsIGNoYXIgYyk7CmNoYXIqIHJlbW92ZV9jb21tZW50cyhjaGFyKiBzKTsKCmludCBtYWluKHZvaWQpewoJY2hhciBzW10gPSAKCVIieFh4KAoJCWludCBtYWluKCkgewoJCQkvL2ludFwKCQkJaW50IHg7CgkJfQoJCQoJCQoJKXhYeCI7CglwdXRzKCByZW1vdmVfY29tbWVudHMocykgKTsKCXJldHVybiAwOwp9CgoKLy/Rg9C00LDQu9C10L3QuNC1INC60L7QvNC80LXQvdGC0LDRgNC40LXQsiDQt9CwINC+0LTQuNC9INC/0YDQvtGF0L7QtCDRgSDQt9Cw0YLQuNGA0LDQvdC40LXQvApjaGFyKiByZW1vdmVfY29tbWVudHMoY2hhciogcyl7CgljaGFyKiBpLCAqdCA9IHM7Cglmb3IoY2hhciogcCA9IHM7ICpzOyAqcyA9ICpwKXsKCQlpZigoKnAgPT0gJyInKSB8fCAoKnAgPT0gJ1wnJykpCgkJCWlnbm9yZV9zdHJpbmcocywgcCwgKnApOwoJCWVsc2UgaWYoKCpwID09ICcvJykgJiYgKCoocCArIDEpID09ICcvJykpeyAvL9C+0LTQvdC+0YHRgtGA0L7Rh9C90YvQtSDQutC+0LzQvNC10L3RgtCw0YDQuNGPCgkJCWkgPSBwICsgMjsKCQkJd2hpbGUoKmkgJiYgKCppICE9ICdccicpICYmICgqaSAhPSAnXG4nKSkKCQkJCSsraTsKCQkJcCA9IGk7CgkJfSBlbHNlIGlmKCgqcCA9PSAnLycpICYmICgqKHAgKyAxKSA9PSAnKicpKXsgLy/QvNC90L7Qs9C+0YHRgtGA0L7Rh9C90YvQtSDQutC+0LzQvNC10L3RgtCw0YDQuNC4CgkJCWkgPSBwICsgMjsKCQkJd2hpbGUoKmkpewoJCQkJaWYoKCppID09ICcqJykgJiYgKCooaSArIDEpID09ICcvJykpewoJCQkJCWkgKz0gMjsKCQkJCQlicmVhazsKCQkJCX0KCQkJCSsraTsKCQkJfQoJCQlwICA9IGkgLSAxOwoJCQkqcCA9ICcgJzsKCQl9IGVsc2UKCQkJKytzLCArK3A7Cgl9CglyZXR1cm4gdDsKfQoKLy/Qv9GA0L7Qv9GD0YHQugp2b2lkIGlnbm9yZV9zdHJpbmcoY2hhciomIHMsIGNoYXIqJiBwLCBjaGFyIGMpewoJY2hhciogaSA9IHAgKyAxOwoJd2hpbGUoKmkgJiYgKCppICE9IGMpKXsKCQlpZigqaSA9PSAnXFwnKXsKCQkJaWYoISAqKytpKQoJCQkJYnJlYWs7CgkJfQogICAgICAgICsraTsKCX0KCWlmKCppID09IGMpCgkJKytpOwogICAgCgl3aGlsZShwICE9IGkpCgkJKnMrKyA9ICpwKys7Cn0=