最近在看经典的C语言入门书籍K&R,虽然是一本入门书籍,可是其中的精妙之处却需要慢慢体会。其中的经典题很多,仔细琢磨一定会收获良多。

今天看到这样一道题:编写一个删除C语言程序中所有的注释语句。感觉颇有意思,与大家一起分享一下:


我的思路:

  1. 找到注释的起始符号 \

  2. 判断紧接着的输入字符,如果是*或者是\,则说明后面全是注释,跳过即可,否则照样输出

  3. 其他则直接输出

疑问:

所配套的答案书中提出要考虑引号后面的内容以做出响应,不是很明白这是为什么。个人认为无需考虑引号的影响也能将注释去除,希望有高手能指教一二。

代码:

#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();
	}

}


运行结果截图:

wKioL1PWZbaCC67rAABhsirvNrM958.png

不足之处:

该程序目前只能一行一行的打印。如果能实现把整个文件都打印进去,然后将注释删除就更好了