删除文件中的注释
将c语言源程序(hello.c)文件中的所有注释去掉后存入另一个文件(new_hello.c)。试编写相应程序。
难度:
有脚就行(滑稽)
解法
这个题看似很简单,但需要注意的细节有很多:
-
选择何种合适的数据结构?
-
注释符在程序中都有哪些作用?
-
注释符在程序代码中出现的方式有哪些?
能想明白上面三个问题那么这个题就能上脚做了。
第一个问题:我认为选用单链表作为存储字符的容器进行操作比用字符数组存储字符进行操作更简单便捷,因为此题需要进行大量字符定位和删除多个字符的操作,采用单链表就可以很好的解决这一问题,但如果对单链表不太熟悉的话便会感觉很吃力,所以首先要对单链表的基础知识有所了解。
第二个问题:注释符有两种,分别是“//”和“/* */”,且一般有两个作用,一是对代码文本进行解释说明,增加代码的可读性;二是在调试过程中利用注释符限制某些或某行代码的运行。
第三个问题:这个问题和第二题要连起来理解,知道注释符在程序中的作用后,便要结合它的两种作用来列举出注释符的出现方式,了解所有出现方式后再进行归纳总结,得出删除注释符的一般方法。具体注释符在程序中出现的方式主要有: -
单独出现在某行对下面的代码进行注释。例如://这是一行用于代码分区的注释文本
-
接在代码文本前限制某行代码的执行。例如://printf("%d",i);
-
出现在某行代码后面进行解释说明。例如:printf("%d",i);//注释文本
-
出现在某行代码中间进行解释说明。例如:int i/注释/,j;
-
出现在多行代码的首和尾限制这些代码的执行。例如:
/* fp1=fopen(“hello.c”,“r”);
fp2=fopen(“new_hello.c”,“w”);
while(!feof(fp1)){*/
而在具体代码实现过程中又还要顾及到很多细节,特别是防止发生段错误,具体看代码吧
代码实现过程
```c
#include <stdio.h>
#include<stdlib.h>
typedef struct node_char{
char ch;
struct node_char *next;
}node;
node *del_note(node *head,char ch1,char ch2);//删除所有的注释符
node *del_chinese(node *head); //适用于使用“// ”注释符进行注释的情况
node *del_chinese1(node *head);//适用于使用“/* */ ”注释符进行注释的情况
int main(void){
FILE *fp1,*fp2;
char ch;
fp1=fopen("hello.c","r");
fp2=fopen("new_hello.c","w");
while(!feof(fp1)){
node *head,*p,*tail;
head=tail=NULL;
while((ch=fgetc(fp1))!='\n'){
//读取一行的字符组成单链表
if(ch==-1) goto close;//保险起见用个goto语句,贼拉保险
p=(node*)malloc(sizeof(no