c注释转换成c++注释

原创 2016年05月30日 10:46:49

对于代码来说注释是非常重要的,因为这样可以提高自己写的代码的刻度性,现在实现c转换成c++注释的功能,可以将眼花缭乱的注释方式总结成8个种类,分别是:

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


// 8.C注释本身不匹配

/* int i = 0;

对于这8中情况我们可以采用状态机的方式编程,里面设置C_BEGIN,C_END,CPP_BEGIN,CPP_END这几种状态,然后一次性读取两个字符来决定将无状态切换至相应状态。

代码实现:

///////////////////////////////////////////////////////////////////////////////////////

int main()
{
	ConvertState ret;
	ret=NoteConvert("input.c","output.c");
	if (ret == SUCCESS)
	{
		printf("转换成功\n");
	}
	else if (ret == FAIL)
	{
		printf("转换失败\n");
	}
	else
	{
		printf("不匹配\n");
	}
	system("pause");
	return 0;
}


////////////////////////////////////////////////////////////////////////////////////////

#pragma once
#include <stdio.h>
#include <errno.h>
typedef enum ConvertState
{
	SUCCESS,
	FAIL,
	NO_MATCH,
}ConvertState;
typedef enum State
{
	C_BEGAIN,
	C_END,
	CPP_BEGAIN,
	CPP_END,
}State;
ConvertState Convert(FILE *fIn, FILE *fOut)
{
	ConvertState ret=SUCCESS;
	State tag = C_END;
	char first;
	char second='a';
	do{
		first = fgetc(fIn);
		switch (first)
		{
		case '/':
			second = fgetc(fIn);
			if (second == '*')
			{
				if (tag == C_END)
				{
					fputc('/', fOut);//1.一般问题
					fputc('/', fOut);
					tag = C_BEGAIN;//3.匹配问题
				}
				else
				{
					fputc('/', fOut);
					fputc('*', fOut);
				}
			}
			else if (second == '/')//7.c++注释问题   // /*xxxxxxxxxxxx*/
			{
				char nextNEXT;
				fputc('/', fOut);
				fputc('/', fOut);
				tag = CPP_BEGAIN;
				do{
					nextNEXT = fgetc(fIn);
					fputc(nextNEXT, fOut);		
				} while (nextNEXT != '\n'&&nextNEXT != EOF);
				tag = CPP_END;
			}
			break;
		case'\n'://4.多行注释问题
			if (tag == C_BEGAIN)
			{
				fputc('\n', fOut);
				fputc('/', fOut);
				fputc('/', fOut);
			}
			else
			{
				fputc('\n', fOut);
			}
			break;
		case '*':
			second = fgetc(fIn);
			if (second == '/')
			{
				char next=fgetc(fIn);
				if (next == '/')// 5.连续注释问题/**//**/
				{
					fputc('\n', fOut);
					fseek(fIn, -1, SEEK_CUR);
				}
				else if (next != '\n'&&next!=EOF)//2.换行问题
				{
					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:
			fputc(first, fOut);
			break;
		}
	} while (first != EOF);
	if (ret != C_END)
	{
		ret = NO_MATCH;
	}
	return ret;
}
ConvertState NoteConvert(char *inputFile, char *outputFile)
{
	ConvertState ret;
	FILE *fIn = fopen(inputFile, "r");
	FILE *fOut = fopen(outputFile, "w");
	if (fIn == NULL)
	{		
		printf("打开文件失败\n");
		printf("errno:%d\n",errno);
		perror("perror says open failed");
		return;
	}
	if(fOut== NULL)
	{
		fclose(fIn);
		printf("打开文件失败\n");
		perror("perror says open failed");		
		return;
	}
	ret=Convert(fIn,fOut);
	fclose(fIn);
	fclose(fOut);  
}



这种方式称为状态机编程,对于有很多情况且比较混乱的情况是可以采用这种方式。

本文出自 “anser” 博客,请务必保留此出处http://674353165.blog.51cto.com/10786549/1743406

版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言项目:注释转换(C风格注释转换成C++风格注释)

1.convert_comment.h#ifndef __CONVERT_COMMENT_H__ #define __CONVERT_COMMENT_H__#include #include #de...
  • Tianzez
  • Tianzez
  • 2017年12月06日 21:55
  • 101

ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)

Excel2HtmlTable的主要功能就是把Excel的内容以表格的方式,展现在页面中。Excel的多个Sheet对应页面的多个Tab选项卡。 转换算法的难点在于,如何处理行列合并,将Excel的行...

【C语言】C语言注释转换成C++注释。

C语言

注释转换(C---->C++)

四种状态: 测试代码: // 1.一般情况 /* int i = 0; */ // 2.换行问题 /* int i = 0; */int j = 0; /* int i = 0; */ int ...

【C语言】实现注释转换(c->c++)

由上图可知:C语言注释转换主要分为四个状态:Nul_STATE(空状态)、C_STATE(C注释状态)、Cpp_STATE(C++注释状态)和End_STATE(结束状态); 重要的是要分清每个状态...

小程序--注释转换(C to c++)

在此次小项目中的不足之处:在编程过程中由于对extern运用不熟悉,导致文件链接错误,除此之外粗心之下变量名写错,造成死循环。 头文件(turns.h): #ifndef _TURNS_H_ #def...

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

注释转换: 分析图如下:                源文件convert.c实现c注释转换为c++注释: #include #include"convert.h" static int...

注释转换(C->C++)

C语言的注释是/*  */     而C++的注释是// 转换思路: 1.设置两个状态,分别为注释中、注释外 2..逐次读取input.txt中的字符 a) 遇到 ‘/’ 读取下一个字符即判断...
  • MJ813
  • MJ813
  • 2016年12月01日 18:10
  • 138

C语言实现C到C++的注释转换

C语言中的注释一般为/*......*/来标注,C++的注释一般为//来标注,为了完成注释的转换,我考虑了一下几种情:    1.一般情况    /* int i = 0; */    这是最通常的情...
  • pawnsir
  • pawnsir
  • 2016年05月28日 18:35
  • 169
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c注释转换成c++注释
举报原因:
原因补充:

(最多只允许输入30个字)