CommentConvert.h
#ifndef __COMMENT_CONVERT_H__
#define __COMMENT_CONVERT_H__
//#define INPUTNAME "input.c"
//#define OUTPUTNAME "output.c"
#include<stdio.h>
#include<stdlib.h>
enum STATE
{
NUL_STATE,
C_STATE,
CPP_STATE,
END_STATE
};
void DoConvertWork(FILE* pfIn,FILE* pfOut);
void DoNulState(FILE* pfIn,FILE* pfOut);
void DoCState(FILE* pfIn,FILE* pfOut);
void DoCppState(FILE* pfIn,FILE* pfOut);
#endif
CommentConvert.c
#include"CommentConver.h"
enum STATE state=NUL_STATE;
void DoNulState(FILE* pfIn,FILE* pfOut)
{
int first=0;
int second=0;
first=fgetc(pfIn);
switch(first)
{
case '/':
{
second=fgetc(pfIn);
if(second=='*')
{
fputc('/',pfOut);
fputc('/',pfOut);
state=C_STATE;
}
else if(second=='/')
{
fputc(first,pfOut);
fputc(second,pfOut);
state=CPP_STATE;
}
else
{
fputc(first,pfOut);
fputc(second,pfOut);
}
}
break;
case EOF:
state=END_STATE;
default:
fputc(first,pfOut);
break;
}
}
void DoCState(FILE* pfIn,FILE* pfOut)
{
int first=0;
int second=0;
int third=0;
first=fgetc(pfIn);
switch(first)
{
case '*':
{
second=fgetc(pfIn);
switch(second)
{
case '*':
third=fgetc(pfIn);
fputc(first,pfOut);
if(third=='/')
{
state=NUL_STATE;
}
break;
case '/':
third=fgetc(pfIn);
if(third!='\n')
{
fputc('\n',pfOut);
}
if(third=='/')
{
ungetc('/',pfIn);
state=NUL_STATE;
break;
}
fputc(third,pfOut);
state=NUL_STATE;
break;
default:
fputc(first,pfOut);
fputc(second,pfOut);
break;
}
break;
case '\n':
fputc('\n',pfOut);
fputc('/',pfOut);
fputc('/',pfOut);
break;
case EOF:
state=END_STATE;
break;
default:
fputc(first,pfOut);
break;
}
}
}
void DoCppState(FILE* pfIn,FILE* pfOut)
{
int first=0;
first=fgetc(pfIn);
switch(first)
{
case '\n':
fputc(first,pfOut);
state=NUL_STATE;
break;
case EOF:
state=END_STATE;
break;
default:
fputc(first,pfOut);
break;
}
}
void DoConvertWork(FILE* pfIn,FILE* pfOut)
{
while(state!=END_STATE)
{
switch(state)
{
case NUL_STATE:
DoNulState(pfIn,pfOut);
break;
case C_STATE:
DoCState(pfIn,pfOut);
break;
case CPP_STATE:
DoCppState(pfIn,pfOut);
break;
case END_STATE:
break;
default:
break;
}
}
}
test.c
#include"CommentConver.h"
#include<windows.h>
int main()
{
FILE *PfIn=NULL;
FILE *PfOut=NULL;
printf("转换开始\n");
PfIn=fopen("input.c","r");
if(NULL==PfIn)
{
perror("open file for read");
exit(0);
}
PfOut=fopen("output.c","w+");
if(NULL==PfOut)
{
fclose(PfIn);
perror("open file for write");
exit(0);
}
DoConvertWork(PfIn,PfOut);
printf("转换结束\n");
fclose(PfIn);
fclose(PfOut);
system("pause");
return 0;
}