删除C语言源程序文件中的所有注释

 1#include <stdio.h>
 2#include <stdlib.h>
 3#include <string.h>
 4 
 5#define STR_LEN 400
 6 
 7void main()
 8{
 9 FILE *fpr, *fpw;
10 char ch, strline[STR_LEN + 1];
11 
12 int i=0,p=0,q=0;
13 bool bFind = false, bEnd = false;
14 
15 if ((fpr=fopen("c:\\c.c","r")) == NULL)
16 {
17  printf("open file fail!");
18  exit(0);
19 }
20 if ((fpw=fopen("c:\\c_new.c","w")) == NULL)
21 {
22  printf("write file fail!");
23  exit(0);
24 }
25 
26/*
27判断文件结束 用 while(!feof(fpr)) 不是最安全的方式
28可以用  while (fgets(strline, sizeof(strline), fpr) != NULL) { ... } 代替
29*/
30 while(!feof(fpr))
31 {
32 
33  //read a line
34  //fscanf("%s\n", fpr); //也可以读取一行,但前提是这一行中没有空格
35  fgets(strline,  sizeof(strline),  fpr);
36 
37  p = 0;
38  q = strlen(strline);
39  bEnd = false;
40  for (i=0; strline[i]!='\0'; i++)
41  {
42   //find '//'
43   if (!bFind && strline[i] == '/' && strline[i+1] == '/')
44   {
45    p = i;
46    bFind = true;
47    bEnd = true;
48    break;
49   }
50   //find '/*'
51   if (!bFind && strline[i] == '/' && strline[i+1] == '*')
52   {
53    p = i; 
54    bFind = true;           
55   }
56   // find '*/'
57   if (bFind && strline[i] == '*' && strline[i+1] == '/')
58   {
59    q = i+2;
60    bEnd = true;
61   }   
62  }
63 
64  //delete row
65  if (bFind)
66  {
67   for (i=p; i<q; i++)
68   {
69    strline[i] = ' ';
70   }   
71   if (bEnd) 
72   {
73    bFind = false;
74    strline[i-1] = '\n';
75   }
76  }
77  printf("%s", strline);
78  fputs(strline, fpw);
79 }
80 fclose(fpr);
81 fclose(fpw);
82 
83 system("pause");
84}