C语言实现注释转换-创新互联
将C语言注释转换成C++注释
创新互联建站主要从事成都网站建设、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务庐阳,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
#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
#include
#include
#include
#include"AnnotationConvert.h"
int main()
{
test();
system("pause");
return 0;
} 运行结果:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文题目:C语言实现注释转换-创新互联
文章路径:http://www.jxjierui.cn/article/coohoo.html


咨询
建站咨询
