⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oushu.cpp

📁 自己编的一个判断浮点数的有限自动机
💻 CPP
字号:
#include <stdio.h>
#include <string.h>

//State[][]为状态表,以整数组形式存放,0,1,2,3表示状态,-1表示没有此状态
int State[8][4]
				  =	{{2,1,-1,3},
					{1,1,6,-1},
					{-1,-1,6,-1},
					{4,5,-1,-1},
					{-1,-1,6,-1},
					{1,1,6,-1},
					{7,7,-1,-1},
					{7,7,-1,-1}};
int Q[8] = {0,1,1,0,0,1,0,1};	//终态标志:0非终态,1终态。

//缓冲区:
//输入缓冲区:由专门函数操作(ReadALine(),GetChar())
#define BUFFER_SIZE 1000	//表达式缓冲区大小
char Buffer[BUFFER_SIZE];	//表达式缓冲区,以'\0'表示结束
int ipBuffer = 0;		//表达式缓冲区当前位置序号
char ch;	//存放取得的一个字符

//函数声明:
bool Run();	//对存储在缓冲区的一行字符串(以'#'结束)进行运行
void Init();	//全局初始化
bool ReadALine();	//从键盘读一行(没有空格),存于表达式缓冲区Buffer[]中
char GetChar(); //从缓冲区取一个字符,返回该字符的同时将它存于全局变量ch中


//主程序:
void main()
{
	Init();
	while(ReadALine()) //读一行成功,对它进行判断
	{
		if(Run()) //对该行进行运行,看是否能被接受?
			printf("接受\n\n");
		else
			printf("不接受\n\n");
	}
}

//对存储在缓冲区的一行字符串(以'#'结束)进行运行
//返回:如果是无符号定点实数,返回true;否则返回:false
bool Run()
{
	int S=0; //S存放运行时的当前状态,目前为初态
	while(GetChar()!='#')
	{
		if(ch == '0' ) //数字0
			S = State[S][0]; //将状态转换成输入数字0后的状态
		else if(ch >= '1'&& ch<='9') //数字
			S = State[S][1]; //将状态转换成输入数字后的状态
		else if(ch=='.')//小数点
			S = State[S][2];//将状态转换成输入小数点后的状态
		else if(ch=='+'||ch=='-')//+号或-号
			S = State[S][3];
		else //其他都为非法字符
			return false;
		if(S == -1) //处于非法状态
			return false;
	}
	//运行结束,判断S是否为终态
	if(Q[S] == 1) //终态
		return true;
	else //非终态
		return false;
}

//全局初始化
void Init()
{
	//好像无需初始化
	printf("程序功能:输入一个字符串,判断它是否是定点实数。\n");
	printf("======================================================\n\n");
}

//从键盘读一行(没有空格),存于表达式缓冲区Buffer[]中,以'#'结束,并置ipBuffer=0;
//读到非空字符串:返回 true;读到单独的“#”:返回 false
bool ReadALine()
{
	int l;
	printf("请输入以\"#\"号结束的无空格字符串,不然不接受:");
	scanf("%s",Buffer);
	l = strlen(Buffer); //读入的字符串的长度
	if(l == 0) return ReadALine(); //输入了空字符串,重新输入
	if(Buffer[0] == '#') return false; //输入单独的'#'表示不再输入
	ipBuffer = 0;	//初始化缓冲区指针
	return true;
}

//从缓冲区取一个字符,返回该字符的同时将它存于全局变量ch中
//成功:返回字符;不成功:返回'#'
char GetChar()
{
	if((ch = Buffer[ipBuffer]) != '#')
		ipBuffer ++;
	return ch;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -