凝视转换(c转换为c++)

C语言凝视->C++凝视即/*xxxxx*/->//xxxxx

在转换凝视前我们先了解一个概念:什么是有限状态机?

有限状态机FSM是软件上经常使用的一种处理方法,它把复杂的控制逻辑分解成有限个稳定状态。在每一个状态上进行处理。

有限状态机是闭环系统。能够用有限的状态,处理无穷的事务。

// 通常我们使用多路分之语句来处理状态机。即switch()、case语句

//input.c中要处理的情况例如以下

input.c:

//1.普通情况

/*int i = 0;*/

//2.换行问题

/*int y = 0;*/int j = 0;

//3.匹配问题

/*int x = 0;/*12345678*/

//4.多行凝视问题

/*

int h = 0;

int g = 0;

int j = 0;

*/int q = 0;

//5.连续凝视问题

/**//**/

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

/* ****** */

//7.C++凝视问题

// /*1234567890*/

//8.C凝视本身不匹配问题

/*int i = 0;

源文件Annotationconvert.c

<span style="font-size:18px;">#include<stdio.h>
#include<errno.h>
#include<assert.h>
#pragma warning(disable:4996)

typedef enum STATE
{
	FILE_ERROR,   //文件错误
	FILE_SUCCESS, //文件成功
	other_error, //其它错误
	NO_MATCH,   //文件不匹配
}STA;
typedef enum tag
{
	tag_begin,		//凝视中
	tag_end,		//不在凝视中
}TAG;

STA AnnotationConvert(FILE* infile, FILE* outfile)
{
	char firstch, secondch;
	int next;
	assert(infile);
	assert(outfile);
	TAG a = tag_end;

	do{

		firstch = fgetc(infile);
		switch (firstch)
		{
		case‘/‘:
			secondch = fgetc(infile);
			if (secondch == ‘*‘ && a == tag_end)
			{
				fputc(‘/‘, outfile);
				fputc(‘/‘, outfile);
				a = tag_begin;
			}
	       else if (secondch == ‘/‘)
			{
			   fputc(firstch, outfile);
			   fputc(secondch, outfile);
				next = fgetc(infile);
				while (next != EOF && next != ‘\n‘)
				{
					fputc(next, outfile);
					next = fgetc(infile);
				}
			    a = tag_end;
			}
			else
			{
				fputc(firstch, outfile);
				fputc(secondch, outfile);
			}
			break;
		case‘*‘:
			secondch = fgetc(infile);
			if (secondch == ‘/‘)
			{
				fputc(‘\n‘, outfile);
				a = tag_end;
			}
			else if (secondch == ‘*‘)
			{
				fputc(firstch, outfile);
				fseek(infile, -1, SEEK_CUR);
			}
			else
			{
				fputc(firstch, outfile);
				fputc(secondch, outfile);
			}
			break;
		case‘\n‘:
			if (a == tag_begin)
			{
				fputc(firstch, outfile);
				fputc(‘/‘, outfile);
				fputc(‘/‘, outfile);
			}
			else
			{
				fputc(firstch, outfile);
			}
			break;
		default:
			fputc(firstch, outfile);
			break;
		}
	} while (firstch != EOF);
	if (a == tag_end)
	{
		return FILE_SUCCESS;
	}
	else
	{
		return NO_MATCH;
	}
	return 0;
}
STA StartConvert()
{
	STA  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_ERROR;
	}
	if (outfile == NULL)
	{
		fclose(infile);
		return FILE_ERROR;
	}

	s = AnnotationConvert(infile, outfile);

	fclose(infile);
	fclose(outfile);
	return s;
}

int main()
{
	STA ret = StartConvert();
	if (ret == FILE_ERROR)
	{
		printf("文件错误:%d\n", errno);
	}
	else if (ret == FILE_SUCCESS)
	{
		printf("转换成功\n");
	}
	else if (other_error)
	{
		printf("其它错误:%d\n", errno);
	}
	else
	{
		printf("不匹配\n");
	}

	return 0;
}</span>

output.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*/

不匹配

时间: 2024-12-10 11:51:47

凝视转换(c转换为c++)的相关文章

使用Spire.Office自制一个进行批量格式转换(Pdf转换为Word)的工具

使用Spire.Office自制一个进行批量格式转换(Pdf转换为Word)的工具 本文文末提供一个可将PDF转换为Word的小工具供下载. +BIT祝威+悄悄在此留下版了个权的信说: Spire.Office 我一直想找一个工具能够把我收集的一些PDF资料转换为Word版.最近偶然发现一个超级强大的工具Spire.Office for .NET可以做到这一点. 而且Spire.Office提供C#.VB的DLL供调用,还提供了丰富简洁的示例项目可供学习. 如下图所示,Spire.Office

凝视转换(部分)

#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(dis

C++变量转换之转换为CString

1:int转换为CString CString str; str.Format("As string: %d", int); 2:double转换为CString CString str; str.Format("As string: %g", double); 3: 待续..

视频格式转换工具 转换为MP4

视频工具有很多,如专业的premiere,但是我们只要涉及后期转换,不涉及制作,所以用不到这末专业的工具. 一般来说,使用暴风转码或者qq影音工具就足以应付我们的日常转换需求,下面以qq影音软件做说明: 1.打开软件 2.选择参数.进行转换  3.转换完毕

二进制、八进制、十进制、十六进制之间的转换

  最近复习软考各种进制之间的转换着实让人头疼,今天把常用的几种进制之间的转换问题简单做个总结,希望能够对大家有所帮助.   二进制八进制之间的转换   二进制与八进制之间的关系式每个八进制位对应三个二进制位,详情如下:   八进制:  0    1     2    3     4    5     6    7       二进制:000 001 010 011 100 101 110 111   实例:   27.651(8)  010111.110101001(2)   1001.000

二叉树 树 森林之间的转换

树.森林和二叉树的转换 树转换为二叉树 (1)加线.在所有兄弟结点之间加一条连线. (2)去线.树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线. (3)层次调整.以树的根节点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明.(注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子) 森林转换为二叉树 (1)把每棵树转换为二叉树. (2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来. 二叉

first day 进制转换

1.计算机中采用二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供有利途径.节省设备等优点,为了便于描述,又长用八.十六进制作为二进制的缩写,一般技术都采用进位计数,其特点: (1)逢N进一,N是每种进位计数制表示一位数所需要符号数目为基数. 二进制:逢二进一,借一当二 八进制:逢八进一,借一当八 十六进制:........ (2)数制转换 不同进位计数制之间的转换原则:不同进位计数制之间的转换是根据两个有理数如相等,则两数的整数和分数部分一定分别相等的原则进行的,若转换前两数相等,转

第一章 进制转换

数制转换 十进制:有10个基数:0,1,2,3,4,5,6,7,8,9 二进制:有 2 个基数:0,1 八进制:有 8 个基数:0,1,2,3,4,5,6,7 十六进制:有16个基数:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F (A=10,B=11,C=12,D=13,E=14,F=15) 十进制与其他进制之间的转换 一.(1)十进制——二进制:十进制数除以2,除至0时所得余数按反方向写出,即为二进制数. 例: 所得出的二进制为:11101(2)[商为偶数时余数为0:奇数时余

C# DataTable转换成DataRow

linq中的cast<T>()及OfType<T>() DataTable dt=...........//获取从数据库中取出的数据(假设只有一条记录) //Cast<T>()用来将非泛型的序列转换为泛型的序列 DataRow row=dt.Rows.Cast<DataRow>().Single(); //OfType<T>():用来将序列中可以转换的转换为指定的序列 如:一个object数组中有整数和字符串,现在想找出其中最大的数 object