#include<stdio.h>
typedef enum Tag
{
C_ANNOTAION_START = 0, // C注释的开始
C_ANNOTAION_END = 1, // C注释的结束
}Tag;
typedef enum State
{
SUCCESS = 1,//成功
OPEN_FILE_ERROR,//打开文件失败
NO_MATCH,//文档不匹配
OTHER,//其他
}State;
State AnnotationConvert(FILE* cIn,FILE* cOut )
{
char FirstCh, SecondCh;
Tag Is_Start = C_ANNOTAION_END;//是否开始转换
do
{
FirstCh = fgetc(cIn);
switch (FirstCh)
{
// 1.一般情况
///* int i = 0; */
case ‘/‘:
SecondCh = fgetc(cIn);
// 3.匹配问题
///*int i = 0;/*xxxxx*/
if (SecondCh == ‘*‘&&Is_Start == C_ANNOTAION_END)
{
fputc(‘/‘, cOut);
fputc(‘/‘, cOut);
Is_Start = C_ANNOTAION_START;
}
else if (SecondCh == ‘/‘)//c++注释问题
{
char Next = fgetc(cIn);
fputc(‘/‘, cOut);
fputc(‘/‘, cOut);
while (Next != ‘\n‘&&Next!=EOF)
{
fputc(Next, cOut);
Next = fgetc(cIn);
}
//FirstCh = Next;
fseek(cIn, -1, SEEK_CUR);
}
else
{
fputc(FirstCh, cOut);
fputc(SecondCh, cOut);
}
break;
case ‘*‘:
SecondCh = fgetc(cIn);
// 2.换行问题/5.连续注释问题
///* int i = 0; */int j = 0;
///* int i = 0; */
if (SecondCh == ‘/‘)
{
char Next = 0;
Next = fgetc(cIn);
if (Next != ‘\n‘&&Next != EOF)
{
fseek(cIn, -1, SEEK_CUR);
fputc(‘\n‘, cOut);
}
else
{
fputc(‘\n‘, cOut);
}
Is_Start = C_ANNOTAION_END;
}
else if (SecondCh == ‘*‘)
{
fputc(FirstCh,cOut);
fseek(cIn, -1, SEEK_CUR);
break;
}
else
{
fputc(FirstCh, cOut);
fputc(SecondCh, cOut);
}
break;
// 4.多行注释问题
case ‘\n‘:
fputc(‘\n‘, cOut);
if (Is_Start == C_ANNOTAION_START)
{
fputc(‘/‘, cOut);
fputc(‘/‘, cOut);
}
break;
default:
fputc(FirstCh, cOut);
break;
}
} while (FirstCh != EOF);
if (Is_Start == C_ANNOTAION_START)
{
return NO_MATCH;
}
return SUCCESS;
}
State StartAnnotationConvert(const char * input, const char * output)
{
FILE* cIn = fopen(input, "r");
FILE* cOut = fopen(output, "w");
State ret = 0;
if (cIn == NULL)
{
fclose(cOut);
return OPEN_FILE_ERROR;
}
if (cOut == NULL)
{
fclose(cIn);
return OPEN_FILE_ERROR;
}
ret=AnnotationConvert(cIn, cOut);
fclose(cIn);
fclose(cOut);
return ret;
}
int main()
{
State ret = StartAnnotationConvert("input.c", "output.c");
if (ret == SUCCESS)
{
printf("转换成功!\n");
}
else if (ret ==NO_MATCH)
{
printf("文档未找到匹配结尾\n");
}
else if (ret == OPEN_FILE_ERROR)
{
printf("打开文件失败\n");
}
return 0;
}原文:http://shaungqiran.blog.51cto.com/10532904/1702526