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

📄 12_3_1.cpp

📁 王红梅编《数据结构》大多数的实验源码。内附详细的实验报告。
💻 CPP
字号:
#include <iostream.h>
#include "stdlib.h"
#include "Stack.cpp"

int GetPriority(char optr)
{
	switch (optr)
	{
		case '+':
			return 1;
		case '-':
			return 1;
		case '*':
			return 2;
		case '/':
			return 2;
		default:
			throw "运算符错误";
	}
}

double Calculate(double a, double b, char o)
{
	switch (o)
	{
		case '+':
			return a + b;
		case '-':
			return a - b;
		case '*':
			return a * b;
		case '/':
			return a / b;
		default:
			throw "运算符出错";
	}
}

void main()
{
	char expr[100];
	cout << "请输入表达式:" << endl;
	cin >> expr;
	int p = 0;
	Stack<char> optr;
	optr.Push('#');
	Stack<double> opnd;
	int i = 0;
	while (expr[i] != '\0')
	{
		i++;
	}
	if (expr[i - 1] != '#')
	{
		expr[i] = '#';
		expr[i + 1] = '\0';
	}
	while (expr[p] != '\0')
	{
		// 将下一个要处理的字符输入ch
		char ch[10];
		int len = 0;
		if (expr[p] >= '0' && expr[p] <= '9')
		{
			while (expr[p + len] >= '0' && expr[p + len] <= '9')
			{
				ch[len] = expr[p + len];
				len++;
			}
			ch[p + len] = '\0';
		}
		else
		{
			ch[0] = expr[p];
		}
		p++;

		if (ch[0] == '#')
		{
			while (optr.GetTop() != '#')
				opnd.Push(Calculate(opnd.Pop(), opnd.Pop(), optr.Pop()));
			cout << opnd.Pop() << endl;
			break;
		}
		else if (ch[0] >= '0' && ch[0] <= '9')
			opnd.Push(atoi(ch));
		else
		{
			char t = optr.GetTop();
			if (t == '#')
				optr.Push(ch[0]);
			else
			{
				if (GetPriority(ch[0]) == GetPriority(t))
				{
					opnd.Push(Calculate(opnd.Pop(), opnd.Pop(), optr.Pop()));
					optr.Push(ch[0]);
				}
				else if (GetPriority(ch[0]) > GetPriority(t))
					optr.Push(ch[0]);
				else
				{
					opnd.Push(Calculate(opnd.Pop(), opnd.Pop(), optr.Pop()));
					optr.Push(ch[0]);
				}
			}
		}
	}
}

⌨️ 快捷键说明

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