题解 | 计算表达式

计算表达式

https://www.nowcoder.com/practice/7b18aa6b7cc14f8eaae6b8acdebf890b

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <vector>
#include <stack>
using namespace std;

int main() {

	string str;
	stack<float> ns;
	stack<char> os;

	getline(cin >> ws, str);

	vector<char>cs(str.begin(), str.end());

	for (int i = 0; i < cs.size(); ) {

		char c = cs[i];

		if (c <= '9' && c >= '0') {

			// 当前字符是数字,循环吃掉所有数字
			int j = i + 1;

			float num = c - '0';
			while (j < cs.size() && cs[j] <= '9' && cs[j] >= '0') {
				num = num * 10 + cs[j] - '0';
				j++;
			}
			ns.push(num);
			i = j;
		}
		else {
			os.push(c);
			i++;
			continue;
		}

		if (ns.size() >= 2) {
			char o = os.top();
			if (o == '*') {
				float r = ns.top();
				ns.pop();
				float l = ns.top();
				ns.pop();
				float ans = r * l;
				ns.push(ans);
				os.pop();
			}
			if (o == '/') {
				float r = ns.top();
				ns.pop();
				float l = ns.top();
				ns.pop();
				float ans = l / r;
				ns.push(ans);
				os.pop();
			}
		}
	}
	float sum = 0;
	while (!os.empty()) {
		char o = os.top();
		float top = ns.top();
		if (o == '+')
		{
			sum += top;
		}
		else {
			sum -= top;
		}
		ns.pop();
		os.pop();
	}
	cout << sum + ns.top() << endl;
	ns.pop();

}

全部评论
点赞 回复 分享
发布于 03-03 16:25 广东

相关推荐

04-03 12:09
東京大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务