最近在看经典的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(); } }
运行结果截图:
不足之处:
该程序目前只能一行一行的打印。如果能实现把整个文件都打印进去,然后将注释删除就更好了
一道有意思的C语言编程题
时间: 2024-11-07 03:41:50