关于K&R练习第一章移除代码注释题的实现方式咨询
关于K&R第一章“移除所有注释”题目的正确打开方式
嘿,我当年啃K&R的时候也卡在过这个点!别担心,咱们顺着作者的思路来就清楚了:
首先,绝对不用后续章节的文件处理函数——第一章刚讲完getchar()、putchar()这些基础字符输入输出,还没涉及fopen、fread这类文件操作,作者的意图就是让你用已经学过的工具来解决问题。
那具体该怎么做?其实题目说的“处理文件内容”,是指通过标准输入输出重定向来读取目标文件、输出处理后的内容。简单说,你写的程序只需要从stdin(标准输入)逐个读字符,处理掉注释后写到stdout(标准输出)就行。运行的时候用命令行重定向:
# 假设你的程序编译后叫remove_comments ./remove_comments < source.c > cleaned_source.c
这样就把source.c的内容喂给程序,处理后的结果写到cleaned_source.c里,完全符合第一章的知识范围。
另外要提醒你,处理注释的时候要注意几个细节,这也是题目考察的核心点:
- 区分单行注释
//和多行注释/* */,K&R里的C标准不允许嵌套多行注释,所以不用处理嵌套情况 - 要注意字符串里的
//或者/*不是注释,比如printf("/* this is not a comment */");里的内容要完整保留 - 还有字符常量里的
/或者*,比如char c = '/';也不能当成注释开头
你可以用状态机的思路来实现:设置几个状态——正常文本状态、单行注释状态、多行注释状态、字符串状态、字符常量状态,每读一个字符就根据当前状态做判断,决定要不要输出这个字符,以及切换到什么状态。
内容的提问来源于stack exchange,提问作者Agrudge Amicus
相关产品推荐
相关产品推荐

