📄 复件 sortexpression.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;
if(*Pre=='/'&&*Current=='0')
return BOOL=FALSE; //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=='-'||*Pre=='-'||*Pre=='-'
||*Pre=='-'||*Pre=='-')
return BOOL=FALSE; //运算符的前一个处理字符也运算符则出错
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
{ //处理'+','*','/','#'
if(*Pre=='-'||*Pre=='-'||*Pre=='-'
||*Pre=='-'||*Pre=='-')
return BOOL=FALSE; //运算符的前一个处理字符也运算符则出错
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 + -