最近在看经典的C语言入门书籍K&R,虽然是一本入门书籍,可是其中的精妙之处却需要慢慢体会。其中的经典题很多,仔细琢磨一定会收获良多。
今天看到这样一道题:编写一个删除C语言程序中所有的注释语句。感觉颇有意思,与大家一起分享一下:
我的思路:
找到注释的起始符号 \
判断紧接着的输入字符,如果是*或者是\,则说明后面全是注释,跳过即可,否则照样输出
其他则直接输出
疑问:
所配套的答案书中提出要考虑引号后面的内容以做出响应,不是很明白这是为什么。个人认为无需考虑引号的影响也能将注释去除,希望有高手能指教一二。
代码:
#include<stdio.h>
void rcomment(int c);
void in_comment(void);
void echo_quote(int c);
/*remove all comments from a valid C program*/
int main()
{
int c,d;
while((c=getchar())!=EOF)
{
rcomment(c);
}
return 0;
}
/*read each character and remove the comments*/
void rcomment(int c)
{
int d;
if (c=='/')//search for the beginning of the comments
{
if ((d=getchar())=='*'||d=='/')
in_comment();
else
{
putchar(c);
putchar(d);
}
}
else
putchar(c);
}
/*inside of a valid comment*/
void in_comment()
{
int c,d;
c=getchar();
d=getchar();
while(c!='*'||d!='/')
{
c=d;
d=getchar();
}
}
运行结果截图:
不足之处:
该程序目前只能一行一行的打印。如果能实现把整个文件都打印进去,然后将注释删除就更好了
转载于:https://blog.51cto.com/xuehanlee/1531793