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

注释转换小项目(c注释->到c++注释)

2016-05-29 22:50 323 查看
首先欢迎阅读本文,注释转换小项目涉及到c语言对文件的操作,另外这个小项目还应该对各种情况都考虑到。将c语言注释转换为c++注释
经过分析思考,我得到证据要的注释转换有以下几类:我将之整理并放入一个文件里,起名input.c
#pragma once

#include<stdlib.h>
#include<stdio.h>
#include<assert.h>
#include<errno.h>

typedef enum Srate
{
C_BEGIN,
C_END,
}Srate;

void Convert(FILE *fIn, FILE *fOut);
void AnnotationConversion(const char* inputFile,
const char* outputFile);
实现文件(测试函数):
#include"AnnotationConversion.h"

void Convert(FILE *fIn, FILE *fOut) //打开文件
{
char first, second;
Srate 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) //C++注释问题
{
char next;
fputc('/', fOut);
fputc('/', fOut);
do
{
next = fgetc(fIn);
if (EOF == next)
{
break;
}
else
fputc(next, fOut);
} while (('\n' != next) && (EOF != next));

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

}

void AnnotationConversion(const char* inputFile,
const char* outputFile)
{
FILE * fOut, *fIn;
fIn = fopen(inputFile, ]结果如下:原本output.c文件里啥也没有,运行程序之后结果如下:
//1.一般情况
// int i=0;

//2.换行问题
// int i=0;
int j = 0;
// int i=0
int j = 0;

//3.匹配问题
// int i=0;/*xxxxxxx

//4.多行注释
//
//int i=0;
//int j=0
//int k=0;
//
int f = 0;

//5.连续注释问题
//
//

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

//7.C++注释问题
// /*xxxxxxxxxxxxxxx*/[/code]测试结果无误,限于本人目前水平,只能写出如上代码,带有进步之时,定会再做修改,如果那位发现了问题,恳请对我提出批评指正,谢谢
本文出自 “分享中进步” 博客,请务必保留此出处http://xmwen1.blog.51cto.com/10730069/1752605
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: