注释转换项目
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*/
从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*/
相关文章推荐
- ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)
- C注释转换为C++注释小项目
- C语言小项目—注释转换( C注释转换为C++注释 )
- 注释转换——C语言项目
- ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)
- 【C项目】注释转换项目
- 小项目注释转换完整版(用状态机实现)
- ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)
- 小项目之注释的转换
- 注释转换小项目(c注释-&gt;到c++注释)
- c语言注释转换项目
- ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)
- 注释转换项目精益版实现
- ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)
- 注释转换——(小项目)
- C注释转换到C++注释项目
- 小项目之C注释转换为C++注释状态
- 注释转换——(小项目)
- 【C语言】注释转换项目实现
- C注释转换到C++注释项目