注释转换 ——C注释转换为标准C++注释

http://blog.csdn.net/fujinlong520/article/details/46573445注释转换
——C++注释转换为标准C语言注释

直接上代码:

<span style="color:#ff0000;">
#include<stdio.h>
#include <errno.h>
#include <assert.h>

typedef enum STATE
{
	SUCCESS,	// 转换成功
	FILE_ERROE,	// 文件错误
	NO_MATCH,	// 不匹配
	OTHER,		// 其他错误
}STATE;

typedef enum TAG
{
	TAG_BEGIN,		// 在C注释段中
	TAG_END,		// C注释结束
}TAG;

#pragma warning(disable:4996)

STATE AnnotationConvert(FILE* inFile, FILE* outFile)
{
	TAG tag = TAG_END;
	char firstCh, secondCh;
	assert(inFile);
	assert(outFile);

	do{
		firstCh = fgetc(inFile);
		switch (firstCh){
			case '/':
				secondCh = fgetc(inFile);
				if (secondCh == '*'&& tag == TAG_END)
				{
					fputc('/', outFile);
					fputc('/', outFile);

					tag = TAG_BEGIN;
				}

				else if(secondCh == '*'&& tag != TAG_END)
				{
					fputc(' ', outFile);
					fputc(' ', outFile);

					tag = TAG_BEGIN;

				}

			 else if(secondCh == '/')
			 {
				    char nextCh;
				   	fputc('/', outFile);
					fputc('/', outFile);

                       do
                       {   nextCh = fgetc(inFile);
					       fputc(nextCh, outFile);
                        }while ( nextCh != '\n'&& nextCh != '/');
					   if(nextCh == '/')
					   {
							char next;
							next = fgetc(inFile);
							if(next =='/'||next == '*' )
							{
								fputc(' ', outFile);
					            fputc(' ', outFile);

							}

					   }

						//tag = TAG_END;
			 }

				else
				{
					fputc(firstCh, outFile);
					fputc(secondCh, outFile);

				}
				break;

			case '\n':
			//	fputc('\n', outFile);
			  fputc(firstCh, outFile);
                if (tag == TAG_BEGIN)//多行注释问题
                {

                    fputc('/', outFile);
                    fputc('/', outFile);
                }
				break;
			case '*':
				secondCh = fgetc(inFile);
				if (secondCh == '/')
				{
					char next = fgetc(inFile);
					if (next != '\n' && next != EOF)
					{

						fputc('\n', outFile);
						if(next != '/')
					{
						   fputc(next,outFile);
					}
						 tag = TAG_BEGIN;

					}

					if (next == EOF)
					{
						firstCh = EOF;
					}
					if(next == '/')//连续注释问题
					{
						//fputc(' ', outFile);
                       // fputc(' ', outFile);
                        //fputc('\n', outFile);
						//firstCh = next;

					    fseek(inFile, -1, SEEK_CUR);//返到上一个字符
                       	//tag = TAG_BEGIN;
					}
			        tag = TAG_END;

				}
				else if(secondCh != '/')
				{
					fputc(firstCh,outFile);

				}
				else
				{
					fputc(firstCh, outFile);
					fputc(secondCh, outFile);
				}
				break;
			default:
				fputc(firstCh, outFile);
				break;
		}
	}while(firstCh != EOF);

	if(tag == TAG_END)
	{
		return SUCCESS;
	}
	else
	{
		return NO_MATCH;
	}
}

int StartConvert()
{
	STATE s;
	const char* inFileName = "input.c";
	const char* outFileName = "output.c";

	FILE* inFile = fopen(inFileName, "r");
	FILE* outFile = fopen(outFileName, "w");

	if (inFile == NULL)
	{
		return FILE_ERROE;
	}

	if (outFile == NULL)
	{
		fclose(inFile);
		return FILE_ERROE;
	}

	s = AnnotationConvert(inFile, outFile);

	fclose(inFile);
	fclose(outFile);

	return s;
}

int main()
{
	STATE ret = StartConvert();

	if (ret == SUCCESS)
	{
		printf("转换成功\n");
	}
	else if (ret == NO_MATCH)
	{
		printf("不匹配\n");
	}
	else if (ret == FILE_ERROE)
	{
		printf("文件错误: %d\n", errno);
	}
	else
	{
		printf("其他错误: %d\n", errno);
	}

	return 0;
} </span>

inFile文件

// 1.一般情况

/* int i = 0; */

// 2.换行问题

/* 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*/

//8.aaa

aa

转换后文件:

// 1.一般情况

// int i = 0;

// 2.换行问题

// 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

//8.aaa

aa?

时间: 2024-12-24 02:58:43

注释转换 ——C注释转换为标准C++注释的相关文章

注释转换(c转换为c++)

//input.c中要处理的情况如下 input.c /*int i = 0;*/ /*int y = 0;*/int j = 0; /*int x = 0;/*12345678*/ /* int h = 0; int g = 0; int j = 0; */int q = 0; /**//**/ /* ****** */ // /*1234567890*/ 源文件Annotationconvert.c <span style="font-size:24px;">#incl

注释转换

注释转换: 由C语言的注释全部转换为C++的注释风格. 什么是有限状态机? 有限状态机FSM是软件上常用的一种处理方法,它把复杂的控制逻辑分解成有限个稳定状态,在每个状态上进行处理. 有限状态机是闭环系统,可以用有限的状态,处理无穷的事务. // 通常我们使多路分之语句来处理状态机 switch (state) { case 1: // ... break ; case 2: // ... break ; case 3: // ... break ; . . . case n : break ;

注释转换??——C++注释转换为标准C语言注释

编写注释转化程序,实现对一个C/C++语言程序源文件中注释的转换功能 1.C++风格的注释//注释转换为标准C分风格/* */注释 2./* */风格的注释保持原样 3.所有的转换需要符合语法规则 4.注释转换需要支持注释嵌套 注释转化要求: 注释的嵌套情形很多,这里只是举例,你需要遵照C/C++语言的注释规则来编写代码,我不会仅测试这里的例子. 1.单行注释或没有嵌套,注释行直接转换,如: ①//123 /* 123 */ ②/* 123 / / 123 */ 不变 ③/*123 */ 保持原

【C语言】注释转换 ——C注释转换为标准C++语言注释

一.具体要求: 1:C风格的注释/* */注释转换为标准C++风格//注释 2://   风格的注释保持原样 3:所有的转换需要符合语法规则 4:注释转换需要支持注释嵌套 二.转换要求: 注释的嵌套情形很多,这里只是举例,你需要遵照C/C++语言的注释规则来编写代码,我不会仅测试这里的例子.                                                          三.注意事项: 1.除以下两种情况的修改,源文件转换后不能有任何其它的修改: a.多余的注释

【C++】注释转换详解 C++注释转换为标准C语言注释

在一个大型工程当中,由于代码人员的多样性,使得代码的注释风格不同.然而在发布版本中,注释风格应该保持一致,以便于其他人员在后期的使用和维护. 由此,产生了如下的需求: 实现对一个C/C++语言程序源文件中注释的转换功能(在这里 我们实现的是C++注释转换为标准C语言注释) 注释转化的要求: 其他注意事项: 具体分析: 在读取源文件的时候,可能遇到的情况有:  C 风格注释(包含注释的嵌套),C++ 风格注释(包含注释的嵌套),字符中嵌套注释,无注释 ,结束等几种状态. 引入 "状态机"

注释转换(C++到C)

在注释转换的学习中,仍有很多不足,希望大家可以批评改正,谢谢~ 满足条件: 1.C++风格的注释//注释转换为标准C分风格/* */注释 2./*  */风格的注释保持原样 3.所有的转换需要符合语法规则 4.注释转换需要支持注释嵌套 注释转换要求: 注释的嵌套情形很多,这里只是举例,你需要遵照C/C++语言的注释规则来编写代码,我不会仅测试这里的例子. 1.单行注释或没有嵌套,注释行直接转换,如: ①//123                             /* 123 */ ②/*

注释转换——(小项目)

一门计算机语言如果想要运用的得心应手,离不开长久的练习,针对C语言的用法,下面主要是用C语言来解决注释转换的问题,C语言中注释是以"/*"开始,以"*/"结束,C++语言中可以通过"//"来注释,这里不考虑C++语言向下兼容C语言的特点,主要是想将"/*       */"注释符转换为"//     ".对于各种的注释情况,程序中能够实现各种各样的注释能够进行转换. 以下是一般人在编写程序时"注释

c语言项目—注释转换(c——c++)

题目要求: 要将全部的c语言风格的注释转换为c++风格的注释,如下图所示,需要将input.c文件经过注释转换程序转换为output.c文件所示. 这是测试结果: 首先我们来分析一下这个题目,在做这个项目时,我们需要引进有限状态机这个概念.那我们先来了解一下什么是有限状态机. 有限状态机FSM是软件上一种常用的处理方法,他把复杂的控制逻辑分成有限个稳定状态,在每个状态上进行处理. 我们来画一下状态图: 所以我们把这个项目分成这几个状态. NUL_STATE, C_STATE,  CPP_STAT

PHP标准的注释方法

PHP标准的注释方法: 单行注释语法: 用 // 开头,作为单行注释; 用 # 开头,作为单行注释; 多行注释语法: 以 /* 开头,以 */结束的多行注释: