您的位置:首页 > 编程语言 > C语言/C++

C语言实现注释转换

2016-08-03 18:55 330 查看
将C语言注释转换成C++注释

#pragma once

#pragma warning (disable:4996)
typedef enum ConvertState
{
SUCCESS,//转换成功
FILE_ERROR,//打开文件失败
NO_MATCH,//转换失败
} ConvertState;

//转换的状态
typedef enum State
{
C_BEGIN,//C语言注释开始
C_END,//C语言注释结束
CPP_BEGIN,//C++注释开始
CPP_END,//C++注释结束
}State;
ConvertState Convert(FILE *fin, FILE *fout)
{
ConvertState  ret = SUCCESS;
char first, second;
State tag = C_END;
assert(fin);
assert(fout);
do{
first = fgetc(fin);
switch (first)
{
case '/':
second = fgetc(fin);
if (second == '*')
{
//3/匹配问题
if (tag == C_END)
{
fputc('/',fout);
fputc('/',fout);
tag = C_BEGIN;
}
else
{
fputc('/', fout);
fputc('*', fout);
}
}
else if (second == '/')
{
char next;
fputc('/', fout);
fputc('/', fout);
do{
next = fgetc(fin);
fputc(next, fout);
if (next == EOF)
return ret;
} while (next != '\n');
}
else
{
fputc(first, fout);
fputc(second, fout);
}
break;
case '\n':
//4.多行注释问题
fputc('\n', fout);

if (tag == C_BEGIN)
{
fputc('/', fout);
fputc('/', fout);
}
break;
case '*':
second = fgetc(fin);
if (second == '/')
{
//2.换行问题
char next = fgetc(fin);
//5.连续注释问题
if (next == '/')
{
fputc('/n', fout);
fseek(fin, -1, SEEK_CUR);
}
else if (next != '\n'&&next != EOF)
{
fputc('\n', fout);
fputc(next, fout);
}
else
{
fputc('/n', fout);
}
tag = C_END;
}
else if (second == '*')
{
fputc(first, fout);
fseek(fin, -1, SEEK_CUR);
}

else
{
fputc(first, fout);
fputc(second, fout);
}
break;
default:
if (first != EOF)
{
fputc(first, fout);
}
break;
}

} while (first != EOF);
if (tag != C_END)
{
ret = NO_MATCH;
}
return ret;
}
ConvertState AnnotationConvert(const char*inputfile, const char* outputfile)
{
ConvertState ret;
FILE* fout, *fin;
fin = fopen(inputfile, "r");
if (fin == NULL)
{
printf("打开文件%s失败,errno:%d\n", inputfile, errno);
return FILE_ERROR;
}
fout = fopen(outputfile, "w");
if (fout == NULL)
{
fclose(fin);
printf("打开文件%s失败,errno:%d\n", outputfile, errno);
return FILE_ERROR;
}
ret = Convert(fin, fout);
fclose(fin);
fclose(fout);
return ret;
};

void test()
{
char *inputfile = "C";
char *outputfile = "C++";
ConvertState flag=AnnotationConvert(inputfile, outputfile);
if (flag == SUCCESS)
{
printf("转换成功,请查看");
}
else if (flag == FILE_ERROR)
{
printf("打开文件失败");
}
else
{
printf("转换失败=_=||");
}
}

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<errno.h>
#include"AnnotationConvert.h"

int main()
{
test();
system("pause");
return 0;
}
运行结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 注释转换