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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define STR_LEN 400
 
void main()
{
 FILE *fpr, *fpw;
 char ch, strline[STR_LEN + 1];
 
 int i=0,p=0,q=0;
 bool bFind = false, bEnd = false;
 
 if ((fpr=fopen("c:\\c.c","r")) == NULL)
 {
  printf("open file fail!");
  exit(0);
 }
 if ((fpw=fopen("c:\\c_new.c","w")) == NULL)
 {
  printf("write file fail!");
  exit(0);
 }
 
/*
判断文件结束 用 while(!feof(fpr)) 不是最安全的方式
可以用  while (fgets(strline, sizeof(strline), fpr) != NULL) { ... } 代替
*/
 while(!feof(fpr))
 {
 
  //read a line
  //fscanf("%s\n", fpr); //也可以读取一行,但前提是这一行中没有空格
  fgets(strline,  sizeof(strline),  fpr);
 
  p = 0;
  q = strlen(strline);
  bEnd = false;
  for (i=0; strline[i]!='\0'; i++)
  {
   //find '//'
   if (!bFind && strline[i] == '/' && strline[i+1] == '/')
   {
    p = i;
    bFind = true;
    bEnd = true;
    break;
   }
   //find '/*'
   if (!bFind && strline[i] == '/' && strline[i+1] == '*')
   {
    p = i; 
    bFind = true;           
   }
   // find '*/'
   if (bFind && strline[i] == '*' && strline[i+1] == '/')
   {
    q = i+2;
    bEnd = true;
   }   
  }
 
  //delete row
  if (bFind)
  {
   for (i=p; i<q; i++)
   {
    strline[i] = ' ';
   }   
   if (bEnd) 
   {
    bFind = false;
    strline[i-1] = '\n';
   }
  }
  printf("%s", strline);
  fputs(strline, fpw);
 }
 fclose(fpr);
 fclose(fpw);
 
 system("pause");
}

Comments are closed.