您的位置:首页 > 其它

注释转换

2016-04-03 15:24 246 查看
AnnotationConversion.h
# pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <errno.h>
typedef enum State
{
c_BEGIN,
c_END
}State;
typedef enum RunState
{
SUCCESS,
FILE_WRONG,
NO_MATCH
}RunState;
RunState AnnotationConvert(const char* input,const char* output);
AnnotationConversion.c
#include "AnnotationConversion.h"
RunState convert(FILE* input, FILE* output)
{
char first,second;
RunState ret = SUCCESS;
State tag = c_END;
assert(input);
assert(output);
do{
first = fgetc(input);
switch(first)
{
case '/':
second = fgetc(input);
if(second == '*')
{
//3.匹配问题
if(tag == c_END)
{
fputc('/',output);
fputc('/',output);
tag = c_BEGIN;
}
else
{
fputc('/', output);
fputc('*', output);
}
}
else if(second == '/')//C++注释问题
{
char next;
fputc(first, output);
fputc(second, output);
do
{
next = fgetc(input);
fputc(next, output);
if(next == EOF)
{
return ret;
}
}while(next != '\n');
}
else
{
fputc(first, output);
fputc(second, output);
}
break;
case '\n'://4.多行注释问题
if(tag == c_BEGIN)
{
fputc(first, output);
fputc('/', output);
fputc('/', output);
}
else
{
fputc(first, output);
}
break;
case '*':
second = fgetc(input);
if(second == '/')
{
//2.换行情况
char next = fgetc(input);
if(next == '/')//5.连续注释问题
{
fputc('\n', output);
fseek(input, -1, SEEK_CUR);
}
else if(next != '\n'&& next != EOF)
{
fputc('\n', output);
fputc(next, output);
}
else
{
fputc('\n', output);
}
tag = c_END;
}
else if(second == '*')//6.连续的***/问题
{
fputc(first, output);
fseek(input, -1, SEEK_CUR);
}
else
{
fputc(first,output);
fputc(second,output);
}
break;

default:
if(first != EOF)
{
fputc(first,output);
}
break;
}
}while(first != EOF);
if(tag == c_BEGIN)
{
return NO_MATCH;
}
}
RunState AnnotationConvert(const char* inputFile,const char* outputFile)
{
FILE* fIn,*fOut;
RunState ret;
fIn = fopen(inputFile, "r");
if(fIn == NULL)
{
printf("%s文件打开失败 Error:%d\n",inputFile,errno);
return FILE_WRONG;
}
fOut = fopen(outputFile, "w");
if(fOut == NULL)
{
fclose(fIn);
printf("%s文件打开失败 Error:%d\n",outputFile,errno);
return FILE_WRONG;
}
ret = convert(fIn,fOut);
fclose(fIn);
fclose(fOut);
return ret;
}
Test.c
#include <stdlib.h>
#include "AnnotationConversion.h"
int main()
{
RunState ret;
ret = AnnotationConvert("inputFile.c"," outputFile.c");
if(ret ==SUCCESS)
{
printf("SUCCESS");
}
else if(ret == FILE_WRONG)
{
printf("FILE_WRONG");
}
else
{
printf("NO_MATCH");
}
system("pause");
return 0;
}
inputFile.c
1.一般情况

/*int m = 0;*/

2.换行问题

/*int i = 0;*/int j = 0;

/*int i = 0;*/

int j = 0;

3.匹配问题

/*int i = 0/*j = 0*/

4.多行注释问题

/*

int i = 0;

int j = 1;

*/int k = 2;

5.连续注释问题

/*aaa*//*bbb*/

6.连续的***/问题

/***/

7.c++注释问题

//   /*int i = 0;
outputFile.c
1.一般情况

//int m = 0;

2.换行问题

//int i = 0;

int j = 0;

//int i = 0;

int j = 0;

3.匹配问题

//int i = 0/*j = 0

4.多行注释问题

//

//int i = 0;

//int j = 1;

//

int k = 2;

5.连续注释问题

//aaa

//bbb

6.连续的**

问题

//*

7.c++注释问题

//   /*int i = 0;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  转换 注释