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

c语言-注释转换

2018-01-13 18:58 155 查看
用c语言实现一个简单的功能-注释转换

首先要了解两种简单的注释形式:

c风格注释:/* */

c++风格注释://

效果如下图所示:



用几张图来说明思路:

首先是两个文件的引入:



各种状态间的转换:



对获取字符的各种可能性判断:



实现代码如下:

#include <stdio.h>
#include <stdlib.h>
#include "convert.h"
#pragma warning(disable:4996)

enum status Status = NULstatus;
void do_Null(FILE *infile, FILE *outfile)
{
int first = fgetc(infile);
int second;//case里不定义变量
switch (first)
{
case '/':
second = fgetc(infile);
switch (second)
{
case '*':
fputc('/', outfile);
fputc('/', outfile);
Status = Cstatus;
break;
case '/':
fputc('/', outfile);
fputc('/', outfile);
Status = CPPstatus;
break;
default:
ungetc(second,infile);
break;
}
break;
case EOF:
Status = EOFstatus;
break;
default:
fputc(first, outfile);
Status = NULstatus;
break;
}
}
void do_Cpp(FILE *infile, FILE *outfile)
{
int first = fgetc(infile);
switch (first)
{
case '\n':
fputc('\n', outfile);
Status = NULstatus;
break;
case EOF:
Status = EOFstatus;
break;
default:
fputc(first, outfile);
Status = CPPstatus;
break;
}
}
void do_C(FILE *infile, FILE *outfile)
{
int first = fgetc(infile);
int next;
switch (first)
{
case '*':
{
int second = fgetc(infile);
switch (second)
{
case '/':
{
next = fgetc(infile);
if (next == '\n')
{
;
}
else
{
fputc('\n', outfile);
ungetc(next, infile);

}
Status = NULstatus;
break;
}
case'*':
next = fgetc(infile);
fputc(first, outfile);
if (next == '/')
{
Status = NULstatus;
}
break;
default:
fputc(first, outfile);
ungetc(second, infile);
Status = Cstatus;
break;
}
}
break;
case '\n':
fputc('\n', outfile);
fputc('/',outfile);
fputc('/', outfile);
Status = Cstatus;
break;
case EOF:
Status = EOFstatus;
break;
default:
fputc(first, outfile);
Status = Cstatus;
break;
}
}
static void convert_worker(FILE *infile, FILE *outfile)
{
while (Status != EOFstatus)
{
switch (Status)
{
case NULstatus:
do_Null(infile, outfile);
break;
case CPPstatus:
do_Cpp(infile, outfile);
break;
case Cstatus:
do_C(infile, outfile);
break;
case EOFstatus:
break;
default:
break;
}
}
}

void comment_convert(const char *input, const char *output)
{
FILE *infile = fopen(input, "r");
if (NULL == infile)
{
fprintf(stderr, "open file %s for read error!\n", input);
return;
}
FILE *outfile = fopen(output, "w+");
if (NULL == outfile)
{
fprintf(stderr, "open file %s for read error!\n", output);
fclose(infile);

exit(EXIT_FAILURE);
}
convert_worker(infile, outfile);

fclose(outfile);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: