基本计算器,使用反向波兰表示法
basic calculator, using Reverse Polish Notation
我正在尝试制作一个基本的计算器,使用从 string
获取输入并输出 double
的反向波兰表示法。输入是:82+5*8-4/
在标准表示法中应读作 (((8 + 2) * 5) - 8) / 4
。
想要的输出是 10.5,但我的输出是 106.962。
你能解释一下我做错了什么吗?
据我所知,我在 double switch 的字符串中做错了,但我是 C++ 的新手,我不知道问题到底是什么。
这是我尝试过的:
#include <iostream>
int main() {
std::string input = "82+5*8-4/";
double output, num;
num = input.at(0);
for (int i = 1; i < input.size() - 1; i = i + 2) {
switch (input.at(i + 1)) {
case '+':
output = num + input.at(i);
break;
case '-':
output = num - input.at(i);
break;
case '*':
output = num * input.at(i);
break;
case '/':
output = num / input.at(i);
break;
default:
break;
}
num = output;
}
std::cout << output << std::endl;
return (0);
}
使用评论,我现在开始工作了:
#include <iostream>
int main() {
std::string input = "82+5*8-4/";
double output, num1;
num1 = input[0] - '0';
for (int i = 1; i < input.size() - 1; i = i + 2) {
double num2 = input[i] - '0';
switch (input.at(i + 1)) {
case '+':
output = num1 + num2;
break;
case '-':
output = num1 - num2;
break;
case '*':
output = num1 * num2;
break;
case '/':
output = num1 / num2;
break;
default:
break;
}
num1 = output;
}
std::cout << output << std::endl;
return (0);
}
我正在尝试制作一个基本的计算器,使用从 string
获取输入并输出 double
的反向波兰表示法。输入是:82+5*8-4/
在标准表示法中应读作 (((8 + 2) * 5) - 8) / 4
。
想要的输出是 10.5,但我的输出是 106.962。
你能解释一下我做错了什么吗?
据我所知,我在 double switch 的字符串中做错了,但我是 C++ 的新手,我不知道问题到底是什么。
这是我尝试过的:
#include <iostream>
int main() {
std::string input = "82+5*8-4/";
double output, num;
num = input.at(0);
for (int i = 1; i < input.size() - 1; i = i + 2) {
switch (input.at(i + 1)) {
case '+':
output = num + input.at(i);
break;
case '-':
output = num - input.at(i);
break;
case '*':
output = num * input.at(i);
break;
case '/':
output = num / input.at(i);
break;
default:
break;
}
num = output;
}
std::cout << output << std::endl;
return (0);
}
使用评论,我现在开始工作了:
#include <iostream>
int main() {
std::string input = "82+5*8-4/";
double output, num1;
num1 = input[0] - '0';
for (int i = 1; i < input.size() - 1; i = i + 2) {
double num2 = input[i] - '0';
switch (input.at(i + 1)) {
case '+':
output = num1 + num2;
break;
case '-':
output = num1 - num2;
break;
case '*':
output = num1 * num2;
break;
case '/':
output = num1 / num2;
break;
default:
break;
}
num1 = output;
}
std::cout << output << std::endl;
return (0);
}