#include "commentconvert.h"
enum State state = NUL_STATE; //将state的状态置为无状态
void DoNulState(FILE* pfIn,FILE* pfOut) //无状态处理
{
int first = 0;
first = fgetc(pfIn);
switch(first)
{
case '/':
{
int second = 0;
second = fgetc(pfIn);
switch(second)
{
case '*':
{
fputc(first,pfOut);
fputc('/',pfOut);
state = C_STATE;
break;
}
case '/':
{
fputc(first,pfOut);
fputc(second,pfOut);
state = CPP_STATE;
}
break;
default:
{
fputc(first,pfOut);
fputc(second,pfOut);
}
break;
}
}
break;
case EOF:
{
fputc(first,pfOut);
state = NUL_STATE;
}
break;
default:
fputc(first,pfOut);
break;
}
}
void DoCState(FILE* pfIn,FILE* pfOut) //C_STATE状态处理
{
int first = 0;
first = fgetc(pfIn);
switch(first)
{
case '*':
{
int second = 0;
second = fgetc(pfIn);
switch(second)
{
case '/':
{
int third = 0;
third = fgetc(pfIn);
state = NUL_STATE;
if(third == '\n')
{
//fputc(third,pfOut);
ungetc(third,pfIn);
}
else
{
fputc('\n',pfOut);
ungetc(third,pfIn);
}
}
break;
case '*':
{
int third = 0;
third = fgetc(pfIn);
state = NUL_STATE;
if(third == '/')
{
int four = 0;
four = fgetc(pfIn);
if(four == '\n')
{
ungetc(four,pfIn);
//fputc('\n',pfOut);
}
else
{
fputc('\n',pfOut);
ungetc(four,pfIn);
}
}
ungetc(second,pfIn);
}
break;
default:
{
fputc(first,pfOut);
ungetc(second,pfIn);
}
}
}
break;
case '\n':
{
fputc(first,pfOut);
fputc('/',pfOut);
fputc('/',pfOut);
}
break;
default:
fputc(first,pfOut);
break;
}
}
void DoCppState(FILE* pfIn,FILE* pfOut) //CPP_STATE状态处理
{
int first = 0;
first = fgetc(pfIn);
if(first == '\n')
{
fputc(first,pfOut);
state = NUL_STATE;
}
else if(first == EOF)
{
fputc(first,pfOut);
state = END_STATE;
}
else
{
fputc(first,pfOut);
}
}
void Docommentconvert(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;
default:
break;
}
}
}
#include "commentconvert.h"
void Commentconvert()
{
FILE *pfRead = NULL;
FILE *pfWrite = NULL;
pfRead = fopen("input.c","r");
if(pfRead == NULL) //判断文件打开是否成功
{
perror("open file for input:");
exit(EXIT_FAILURE);
}
pfWrite = fopen("output.c","w");
if(pfRead == NULL)
{
perror("open file for output:");
fclose(pfRead); //到这里pfRead已经打开,所以关闭
exit(EXIT_FAILURE);
}
Docommentconvert(pfRead,pfWrite);
fclose(pfRead);
fclose(pfWrite);
}
int main()
{
Commentconvert();
system("pause");
return 0;
}#ifndef __COMMENT_CONVERT_H__
#define __COMMENT_CONVERT_H__
#include
#include
#include
enum State
{
NUL_STATE,
C_STATE,
CPP_STATE,
END_STATE
};
void Docommentconvert(FILE *pfIn,FILE *pfOut);
void DoNulState(FILE* pfIn,FILE* pfOut);
void DoCState(FILE* pfIn,FILE* pfOut);
void DoCppState(FILE* pfIn,FILE* pfOut);
#endif//__COMMENT_CONVERT_H__// 1.一般情况
/* int i = 0; */
// 2.换行问题
/* int i = 0; */int j = 0;
/* int i = 0; */
int j = 0;
// 3.匹配问题
/*int i = 0;/*xxxxx*/
// 4.多行注释问题
/*
int i=0;
int j = 0;
int k = 0;
*/int k = 0;
// 5.连续注释问题
/*ww*//*ww*/
// 6.连续的**/问题
/***/
// 7.C++注释问题
// /*xxxxxxxxxxxx*/
注释转换
最新推荐文章于 2025-08-01 11:03:06 发布