K&Rを読もう(16) 演習 1-23 コメントの除去
/* */コメントの除去。
//==== コメント除去テスト /***************************************** * * ex-1-23.c * *****************************************/ //==== ここまで #include <stdio.h> #include <stdlib.h> enum {IN, OUT}; int main(void) { int c,d; int status = OUT; c = getchar(); /* 現在の文字 */ while (c != EOF) { d = getchar(); /* 1文字先読み */ if (c == '/' && d == '*' && status == OUT) status = IN; else if (c == '*' && d == '/' && status == IN) { d = getchar(); /* 読み飛ばす */ status = OUT; } else if (status == OUT) putchar(c); c = d; } exit(EXIT_SUCCESS); }
一文字先読みアルゴリズムを知ってれば簡単。知らないとかなり大変だと思う。
テスト。
//==== コメント除去テスト //==== ここまで #include <stdio.h> #include <stdlib.h> enum {IN, OUT}; int main(void) { int c,d; int status = OUT; c = getchar(); while (c != EOF) { d = getchar(); if (c == '/' && d == '*' && status == OUT) status = IN; else if (c == '*' && d == '/' && status == IN) { d = getchar(); status = OUT; } else if (status == OUT) putchar(c); c = d; } exit(EXIT_SUCCESS); }
さっぱり消えた!!
- ネストしたコメントには対応してません。
- //も同じように出来るのでパス。
追記
引用符に囲まれたコメントも除去されてしまう。