欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

利用棧計(jì)算算數(shù)表達(dá)式的值

先將中綴表達(dá)式利用棧轉(zhuǎn)換為后綴表達(dá)式,然后再利用棧由后綴表達(dá)式計(jì)算算數(shù)表達(dá)式的值,具體代碼如下:

創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、義安網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為義安等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

#include <iostream>
using namespace std;

#include <string>
#include <vector>
#include <stack>

enum Type
{
	OP_NUM,
	OP_SYMBOL,
};

enum Operat
{
	ADD,
	SUB,
	MUL,
	DIV,
};

struct Cell
{
	Type _type;
	int _num;
};

//input = 1 + ((2 + 3) * 4) - 5;

//中綴到后綴
string topolishNotation(const char* input)
{
	stack<char> s1; //運(yùn)算符
	stack<char> s2; //數(shù)字
	size_t iCount = 0;
	while (input[iCount] != '\0')
	{
		//是數(shù)字將其壓入s2
		if (input[iCount] >= '0'&& input[iCount] <= '9')
		{
			while (input[iCount] != '\0' && input[iCount] >= '0'&& input[iCount] <= '9')
			{
				s2.push(input[iCount++]);
			}
			s2.push(' ');
			--iCount; //最后會統(tǒng)一加1,所以先減一
		}

		//是運(yùn)算符比較其與S1棧頂運(yùn)算符的優(yōu)先級
		while (input[iCount] == '+' || input[iCount] == '-' ||
			input[iCount] == '*' || input[iCount] == '/')
		{
			//s1為空,或棧頂運(yùn)算符為左括號“(”,則直接將此運(yùn)算符入棧
			if (s1.empty() || s1.top() == '(')
			{
				s1.push(input[iCount]);
				break;
			}
			//否則,若優(yōu)先級比棧頂運(yùn)算符的高,也將運(yùn)算符壓入s1
			else if ((input[iCount] == '*' || input[iCount] == '/') &&
				(s1.top() == '+' || s1.top() == '-'))
			{
				s1.push(input[iCount]);
				break;
			}
			//否則,將S1棧頂?shù)倪\(yùn)算符彈出并壓入到S2中,再次與S1中新的棧頂運(yùn)算符相比較
			else
			{
				s2.push(s1.top());
				s1.pop();
			}
		}

		//如果是左括號“(”,則直接壓入S1;
		if (input[iCount] == '(')
		{
			s1.push(input[iCount]);
		}

		/*如果是右括號“)”,則依次彈出S1棧頂?shù)倪\(yùn)算符,并壓入S2,
		*直到遇到左括號為止,此時(shí)將這一對括號丟棄;*/
		if (input[iCount] == ')')
		{
			while (s1.top() != '(')
			{
				s2.push(s1.top());
				s1.pop();
			}
			s1.pop(); //將'('也出棧
		}

		++iCount; //統(tǒng)一加一次
	}

	//將S1中剩余的運(yùn)算符依次彈出并壓入S2;
	while (!s1.empty())
	{
		s2.push(s1.top());
		s1.pop();
	}

	string ret;
	while (!s2.empty())
	{
		ret.push_back(s2.top());
		s2.pop();
	}
	reverse(ret.begin(), ret.end());
	return ret;
}

//后綴到數(shù)組
vector<Cell> StrBehindToVect(const string& strBehind)
{
	vector<Cell> call;
	size_t iCount = 0;
	while (strBehind[iCount] != '\0')
	{
		if (strBehind[iCount] >= '0' && strBehind[iCount] <= '9')
		{
			int ret = 0;
			while (strBehind[iCount] != '\0' && strBehind[iCount] >= '0' && strBehind[iCount] <= '9')
			{
				ret = ret * 10 + strBehind[iCount] - '0';
				++iCount;
			}
			call.push_back({ OP_NUM, ret });
			--iCount;
		}
		else if (strBehind[iCount] == '+')
		{
			call.push_back({ OP_SYMBOL, ADD });
		}
		else if (strBehind[iCount] == '-')
		{
			call.push_back({ OP_SYMBOL, SUB });
		}
		else if (strBehind[iCount] == '*')
		{
			call.push_back({ OP_SYMBOL, MUL });
		}
		else if (strBehind[iCount] == '/')
		{
			call.push_back({ OP_SYMBOL, DIV });
		}
		++iCount;
	}
	return call;
}

//計(jì)算值
int RPNCount(const vector<Cell>& array, size_t size)
{
	stack<int> val;
	for (size_t i = 0; i < size; ++i)
	{
		if (array[i]._type == OP_NUM)
		{
			val.push(array[i]._num);
		}
		else
		{
			int right = val.top();
			val.pop();
			switch (array[i]._num)
			{
			case ADD:
				val.top() += right;
				break;
			case SUB:
				val.top() -= right;
				break;
			case MUL:
				val.top() *= right;
				break;
			case DIV:
				if (right == 0)
				{
					throw(array[i]);
				}
				val.top() /= right;
				break;
			default:
				cout << "請輸入合法字符" << endl;
				exit(0);
			}/*switch*/
		}
	}
	return val.top();
}

int main()
{
	string strMid = "12 * (3 + 4) - 6 + 8 / 2";
	string strBehind = topolishNotation(strMid.c_str());
	vector<Cell> call = StrBehindToVect(strBehind);
	try
	{
		int ret = RPNCount(call, call.size());
		cout << ret << endl;
	}
	catch (Cell)
	{
		cout << "除數(shù)為0!" << endl;
	}
	system("pause");
	return 0;
}

分享標(biāo)題:利用棧計(jì)算算數(shù)表達(dá)式的值
URL網(wǎng)址:http://aaarwkj.com/article40/ijhdeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站策劃用戶體驗(yàn)、Google微信公眾號、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
国产精品一区二区污网站| 无套内射精品一区二区| 人体蜜桃视频一区二区| 亚洲婷婷综合精品五月天| 91美女黑丝免费国产视频| av国产剧情在线观看| 亚洲中文字幕激情中午字幕| 999热这里只有精品视频| 青青草原这里只有精品| 久久亚洲欧洲日本韩国欧美| 懂色av中文一区二区| 亚洲精品在线观看午夜福利| 国产精品国产精品国产| 日本精品在线小视频| 丝袜在线美腿视频网站| 亚洲永久免费精品一区二区三区| 九七青青草视频在线观看| 91欧美激情另类亚洲| 国产视频一区2区三区| 麻豆精品新av中文字幕| 东京热一区二区电影| 最新日本免费久久精品| 日本熟熟妇丰满人妻啪啪| 欧美色精品人妻视频在线| 国产剧情av一区在线观看| 精品啪啪高潮一区二区| 蜜臀av人妻一区二区三区| 日本 午夜 在线 视频| 国产一级av在线播放| 国产欧美日韩国产欧美日| 久久偷拍一区二区三区| 国产日韩欧美一区综合| 91免费在线观看国产精品| 国产精品午夜视频免费观看| 91欧美日韩中在线视频| 人妻少妇系列一区二区| 国产乱码精品免费一区二区av| 偷拍视频在线一区二区| 男人天堂手机视频在线| 欧美中日韩精品免费在线| 成人综合影视中文字幕|