您的位置:首页 > 其它

注释转换项目

2016-08-13 16:28 260 查看
注释转换:由C语言的注释全部转换为C++的注释风格。

从input.c文件里读取的内容注释转换存储到output.c文件中。

状态图为:



                     通常采用switch case语句来处理。

input.c文件里的内容为:

// 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.连续注释问题
/**//**/

// 6.连续的**/问题
/***/

// 7.C++注释问题
// /*xxxxxxxxxxxx*/

代码为:

测试源文件 test.c

#include "commentconvert.h"

int main()
{
int frist=0;
FILE* pfout=NULL;
FILE* pfin=NULL;
enum STATE state=NUL_STATE;
pfin=fopen(INPUT,"r");
if(pfin==NULL)
{
perror("out of read");
exit(EXIT_FAILURE);
}
pfout=fopen(OUTPUT,"w");
if(pfout==NULL)
{
perror("out of write");
fclose(pfin);
exit(EXIT_FAILURE);
}
while(state!=END_STATE)
{
switch(state)
{
case NUL_STATE:
{
DONULSTATE(pfin,pfout,&state);
}
break;
case C_STATE:
{
DOCSTATE(pfin,pfout,&state);
}
break;
case CPP_STATE:
{
DOCPPSTATE(pfin,pfout,&state);
}
break;
default:
break;
}
}
printf("转换成功\n");
system("pause");
return 0;
}

头文件commentconvert.h
#ifndef _COMMENTCONVERT_H__
#define _COMMENTCONVERT_H__
#include <stdio.h>
#include <stdlib.h>

#define INPUT "input.c"
#define OUTPUT "output.c"

enum STATE
{
END_STATE,
NUL_STATE,
C_STATE,
CPP_STATE

};
void DONULSTATE(FILE* pfin,FILE* pfout,enum STATE* state);
void DOCSTATE(FILE* pfin,FILE* pfout,enum STATE* state);
void DOCPPSTATE(FILE* pfin,FILE* pfout,enum STATE* state);

#endif //_COMMENTCONVERT_H__

源文件commentconvert.h
#include "commentconvert.h"
void DONULSTATE(FILE* pfin,FILE* pfout,enum STATE* state)
{
int frist=0;
int second=0;
frist=fgetc(pfin);
switch(frist)
{
case '/':
{
second=fgetc(pfin);
switch(second)
{
case '*':
{

fputc('/',pfout);
fputc('/',pfout);
*state=C_STATE;
}
break;
case '/':
fputc(frist,pfout);
fputc(second,pfout);
*state=CPP_STATE;
break;
default:
break;
}
}
break;
case EOF:
*state=END_STATE;
break;
default:
fputc(frist,pfout);
break;
}
}
void DOCSTATE(FILE* pfin,FILE* pfout,enum STATE* state)
{
int frist=0;
int second=0;
int thrid=0;
frist=fgetc(pfin);
switch(frist)
{
case '*':
{
second=fgetc(pfin);
switch(second)
{
case '/':
thrid=fgetc(pfin);
switch(thrid)
{
case '\n':
fputc(thrid,pfout);
*state=NUL_STATE;
break;
case '/':
fputc('\n',pfout);
ungetc(thrid,pfin);
*state=NUL_STATE;
break;
default:
fputc('\n',pfout);
ungetc(thrid,pfin); //撤销字符
*state=NUL_STATE;
break;
}
break;
default:
fputc(frist,pfout);
ungetc(second,pfin);

break;
}
}
break;
case '\n':
fputc(frist,pfout);
fputc('/',pfout);
fputc('/',pfout);
break;
default:
fputc(frist,pfout);
break;
}
}
void DOCPPSTATE(FILE* pfin,FILE* pfout,enum STATE* state)
{
int frist=0;
frist=fgetc(pfin);
switch(frist)
{
case '\n':
fputc(frist,pfout);
*state=NUL_STATE;
break;
case EOF:
*state=END_STATE;
break;
default:
fputc(frist,pfout);
break;
}
}


最后转换完成后output.c文件里的内容为:
// 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.连续注释问题
//
//

// 6.连续的**/问题
//*

// 7.C++注释问题
// /*xxxxxxxxxxxx*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: