#include <stdio.h>
void ignore_string(char*& s, char*& p, char c);
char* remove_comments(char* s);
int main(void){
char s[] = "int/*space*/a = 10;\nchar s[] = \"//code\";\nchar c = '\"';\n"\
"char* f = \"/**///\";\n//break\EOF\end\nint e = EOF;//конец";
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+CnZvaWQgaWdub3JlX3N0cmluZyhjaGFyKiYgcywgY2hhciomIHAsIGNoYXIgYyk7CmNoYXIqIHJlbW92ZV9jb21tZW50cyhjaGFyKiBzKTsKCmludCBtYWluKHZvaWQpewoJY2hhciBzW10gPSAiaW50LypzcGFjZSovYSA9IDEwO1xuY2hhciBzW10gPSBcIi8vY29kZVwiO1xuY2hhciBjID0gJ1wiJztcbiJcCgkgICAgICAgICAgICJjaGFyKiBmID0gXCIvKiovLy9cIjtcbi8vYnJlYWtcRU9GXGVuZFxuaW50IGUgPSBFT0Y7Ly/QutC+0L3QtdGGIjsKCXB1dHMoIHJlbW92ZV9jb21tZW50cyhzKSApOwoJcmV0dXJuIDA7Cn0KCgovL9GD0LTQsNC70LXQvdC40LUg0LrQvtC80LzQtdC90YLQsNGA0LjQtdCyINC30LAg0L7QtNC40L0g0L/RgNC+0YXQvtC0INGBINC30LDRgtC40YDQsNC90LjQtdC8CmNoYXIqIHJlbW92ZV9jb21tZW50cyhjaGFyKiBzKXsKCWNoYXIqIGksICp0ID0gczsKCWZvcihjaGFyKiBwID0gczsgKnM7ICpzID0gKnApewoJCWlmKCgqcCA9PSAnIicpIHx8ICgqcCA9PSAnXCcnKSkKCQkJaWdub3JlX3N0cmluZyhzLCBwLCAqcCk7CgkJZWxzZSBpZigoKnAgPT0gJy8nKSAmJiAoKihwICsgMSkgPT0gJy8nKSl7IC8v0L7QtNC90L7RgdGC0YDQvtGH0L3Ri9C1INC60L7QvNC80LXQvdGC0LDRgNC40Y8KCQkJaSA9IHAgKyAyOwoJCQl3aGlsZSgqaSAmJiAoKmkgIT0gJ1xyJykgJiYgKCppICE9ICdcbicpKQoJCQkJKytpOwoJCQlwID0gaTsKCQl9IGVsc2UgaWYoKCpwID09ICcvJykgJiYgKCoocCArIDEpID09ICcqJykpeyAvL9C80L3QvtCz0L7RgdGC0YDQvtGH0L3Ri9C1INC60L7QvNC80LXQvdGC0LDRgNC40LgKCQkJaSA9IHAgKyAyOwoJCQl3aGlsZSgqaSl7CgkJCQlpZigoKmkgPT0gJyonKSAmJiAoKihpICsgMSkgPT0gJy8nKSl7CgkJCQkJaSArPSAyOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJKytpOwoJCQl9CgkJCXAgID0gaSAtIDE7CgkJCSpwID0gJyAnOwoJCX0gZWxzZQoJCQkrK3MsICsrcDsKCX0KCXJldHVybiB0Owp9CgovL9C/0YDQvtC/0YPRgdC6CnZvaWQgaWdub3JlX3N0cmluZyhjaGFyKiYgcywgY2hhciomIHAsIGNoYXIgYyl7CgljaGFyKiBpID0gcCArIDE7Cgl3aGlsZSgqaSAmJiAoKmkgIT0gYykpewoJCWlmKCppID09ICdcXCcpewoJCQlpZighICorK2kpCgkJCQlicmVhazsKCQl9CiAgICAgICAgKytpOwoJfQoJaWYoKmkgPT0gYykKCQkrK2k7CiAgICAKCXdoaWxlKHAgIT0gaSkKCQkqcysrID0gKnArKzsKfQ==