fork(3) download
  1. #include <stdio.h>
  2. void ignore_string(char*& s, char*& p, char c);
  3. char* remove_comments(char* s);
  4.  
  5. int main(void){
  6. char s[] = "int/*space*/a = 10;\nchar s[] = \"//code\";\nchar c = '\"';\n"\
  7. "char* f = \"/**///\";\n//break\EOF\end\nint e = EOF;//конец";
  8. puts( remove_comments(s) );
  9. return 0;
  10. }
  11.  
  12.  
  13. //удаление комментариев за один проход с затиранием
  14. char* remove_comments(char* s){
  15. char* i, *t = s;
  16. for(char* p = s; *s; *s = *p){
  17. if((*p == '"') || (*p == '\''))
  18. ignore_string(s, p, *p);
  19. else if((*p == '/') && (*(p + 1) == '/')){ //однострочные комментария
  20. i = p + 2;
  21. while(*i && (*i != '\r') && (*i != '\n'))
  22. ++i;
  23. p = i;
  24. } else if((*p == '/') && (*(p + 1) == '*')){ //многострочные комментарии
  25. i = p + 2;
  26. while(*i){
  27. if((*i == '*') && (*(i + 1) == '/')){
  28. i += 2;
  29. break;
  30. }
  31. ++i;
  32. }
  33. p = i - 1;
  34. *p = ' ';
  35. } else
  36. ++s, ++p;
  37. }
  38. return t;
  39. }
  40.  
  41. //пропуск
  42. void ignore_string(char*& s, char*& p, char c){
  43. char* i = p + 1;
  44. while(*i && (*i != c)){
  45. if(*i == '\\'){
  46. if(! *++i)
  47. break;
  48. }
  49. ++i;
  50. }
  51. if(*i == c)
  52. ++i;
  53.  
  54. while(p != i)
  55. *s++ = *p++;
  56. }
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
int a = 10;
char s[] = "//code";
char c = '"';
char* f = "/**///";

int e = EOF;