ソースファイルのコメントのフィルタ
2195 ワード
この間、ある会社の面接を受けて、自分で書いたアルゴリズムは、ネット上にあるアルゴリズムだと言われ、変数の命名も同じです.どうでもいい!
必要なものがあれば参考にしてください.足りないところは、指摘してください.ありがとう
#include "stdio.h"
int main(int argc, char const *argv[])
{
FILE * fp;
char* buf_old=NULL;
char* buf_new=NULL;
int flag=0;
//in.c out.c
char* in_file="in.c";
char* out_file="out.c";
fp=fopen(in_file,"rb");
if (fp == NULL)
{
printf(" file open failed!");
exit(1);
}
fseek(fp,0,SEEK_END);
//printf("fp")
int file_size = ftell(fp);
printf("size:%d
",file_size);
//
rewind(fp);
//
buf_old=(char*)malloc(file_size);
buf_new=(char*)malloc(file_size);
//
memset(buf_old,0,file_size);
memset(buf_new,0,file_size);
// buf_new
int pcurrent=0;
if(buf_new == NULL || buf_old == NULL)
{
printf("malloc error!");
exit(1);
}
fread(buf_old,1,file_size,fp);
//
fclose(fp);
fp=NULL;
int i=0;
/**
* "//"---> '
' "/*" ---> "* /" ,
* flag , flag 0 , , copy, flag 1 ,
* "//" , '
' , flag 2 , "/*" , "* /"
*/
for(;i<file_size;i++)
{
if(flag == 0 && buf_old[i] == '/')
{
if(buf_old[i+1] == '/')
{
flag = 1;
++i;
}
else if (buf_old[i+1] == '*')
{
flag = 2;
++i;
}
else
{
buf_new[pcurrent]=buf_old[i];
++pcurrent;
}
}
else if (flag == 1)
{
if(buf_old[i] == '
')
{
flag=0;
if(pcurrent > 0 && buf_new[pcurrent-1] != '
')
{ // "//" , , !
buf_new[pcurrent]='
';
++pcurrent;
}
}
}
else if (flag == 2)
{
if(buf_old[i] == '*'&& buf_old[i+1] == '/')
{
flag = 0;
++i;
}
}
else
{
buf_new[pcurrent]=buf_old[i];
++pcurrent;
}
}
// ,
FILE * fout;
fout = fopen(out_file,"wb");
fwrite(buf_new,1,pcurrent,fout);
fclose(fout);
fout = NULL;
//
free buf_new;
free buf_old;
return 0;
}
必要なものがあれば参考にしてください.足りないところは、指摘してください.ありがとう