使用C++实现,使用系统自带stac
- 支持括号处理
- 支持小数计算
- 支持表达式有效性检查
- 支持多轮输入。
运行结果示例:
代码:
#include <iostream>
#include <stack>
#include <string>
using namespace std;
//判断是否是数字字符
int isNumber(char c)
{
if(c>='0' && c<='9')
return 1;
else
return 0;
}
//判断字符是否是操作符,这里仅支持+、-、*、/
int isOperator(char c)
{
if(c=='+' || c=='-' || c=='*' || c=='/')
return 1;
else
return 0;
}
//获取操作符的优先级
int priority(char op)
{
if(op=='+' || op=='-')
return 1;
else if(op=='*' || op=='/')
return 2;
else if(op=='(')
return 0;
return 0;
}
//有效性判断1:判断是否缺操作符,缺操作符返回1,否则返回0
int isLessOperator(char* p)
{
int i = 0,j,k;
//考虑一下几种情况:
//1.数字之间没有操作符,例如 2 3 + 4
//2.(前面是数字,例如 2(2+3),这里不支持省略乘号
//3.)后面是数字,例如 (2+3)3,这里不支持省略乘号
while(p[i]!='\0')
{
if(p[i]==' ')
{
j = i-1;
while(j>=0 && p[j]==' ') j--; //往前遍历,直到遇到非空格
k = i+1;
while(p[k]==' ') k++;//往后遍历,直到遇到非空格
if(j>=0 && isNumber(p[j]) && isNumber(p[k])) //空格前后都是数字
return 1; //说明缺少操作符,返回1
}
else if(p[i]=='(')
{