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

📄 sortexpression.h

📁 按照清华大学的那本数据结构的表达式求值改进
💻 H
字号:
void Init(char *chExpression)
{
	int i,j;
	for(i=0;i<MaxWordNum;i++)	//初始化二维数组	
	{
		for(j=0;j<MaxWordLength;j++)
			OPTROPND[i][j]='\0';
	}
	CurrentNum=0;  //当前操作数和运算符号个数初始化为0
	Current=NULL;  //初始化当前字符指针
	strcpy(Expression,"("); 
	//strcat功能:函数将chExpression字符串连接到Expression的末端,并返回指针Expression.
	//这里将原表达式加在'('后面是为了为后面判断'-'是为双目运算符还是单目运算符做铺垫.
	//比如输入是一个负数-2.1(单目),则将当前操作数赋为0然后下一个赋为运算符'-'再接着敷值
	//它的数值部分2.1,那么得到即为0-2.1=-2.1
	strcat(Expression,chExpression); 
	Current=Expression+1; //将当前字符指针后移,避过人为加入的'('
	Pre=Expression; //把第一个字符的前一个字符初始化为"("
}
Status IsNumber(char ch)
{//判断当前字符是否为数字
	if(ch>='0'&&ch<='9')
		return TRUE;
	return FALSE;
}
Status sortExpression(char *chExpression)
{//检察并且处理输入的表达式
	Init(chExpression);
	bool BOOL=TRUE;  
	while(*Current!='\0'&&BOOL==TRUE)
	{ //一直循环直到表达式出错或者循环到最后一个字符都没错误
      //输入可能有两种情况:1.数字2.运算符号
		//1.数字
		if(IsNumber(*Current))
		{
			int i;  //i为计数器
			i=0;
			do{  //处理第CurrentNum个操作数,只要字符不为运算符就一直按下循环
				OPTROPND[CurrentNum][i++]=*Current; //把当前字符赋给操作数的第i位
				Pre=Current;  //把当前字符赋给个pLastLocation(即把pLastLocation指针后移)
				Current++;    //指针后移
			}while(IsNumber(*Current)); //while
			if(*Current=='.')  //判断是不是为浮点数
			{//以下为浮点数的处理
				OPTROPND[CurrentNum][i++]=*Current; //将'.'接在操作数后面构成浮点数
				Current++; //指针后移
				if(!IsNumber(*Current))  
					return BOOL=FALSE;  //表达式有错误
				while(IsNumber(*Current))
				{ //处理小数点后的数字,只要字符不为运算符就一直按下循环
					OPTROPND[CurrentNum][i++]=*Current; //把当前字符赋给操作数的第i位
				    Pre=Current;  //把当前字符赋给个pLastLocation(即把pLastLocation指针后移 )
				    Current++;    //指针后移
				}//while 
				CurrentNum++;  //操作数或者运算符加1
				BOOL=TRUE;
			}//if
			else  { BOOL=TRUE;  CurrentNum++; } //else
		}//if
		else if(*Current=='-')
		{ 
			if(*Pre=='(')  //'-'为双目操作符
			{
				OPTROPND[CurrentNum][0]=*Current; 
			}//if
			else
			{            //'-'为单单目操作符即为符号
				OPTROPND[CurrentNum][0]='0'; 
				CurrentNum++;
				OPTROPND[CurrentNum][0]='-';  
			}//else
			CurrentNum++;  //操作数或者运算符加1
			Pre=Current;   //把当前字符赋给个pLastLocation(即把pLastLocation指针后移 )
			Current++;     //指针后移
			BOOL=TRUE;
		}//else if
		else
		{ //处理'+','*','/','#'
			OPTROPND[CurrentNum][0]=*Current;  //当前字符赋给操作符
			CurrentNum++;  //操作数或者运算符加1
			Pre=Current;   //把当前字符赋给个pLastLocation(即把pLastLocation指针后移 )
			Current++;     //指针后移
			BOOL=TRUE;
		}//else
	}//while
	return BOOL;
}

⌨️ 快捷键说明

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