ソースファイルのコメントのフィルタ

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; }

必要なものがあれば参考にしてください.足りないところは、指摘してください.ありがとう