一个编程菜鸟的小问题
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int calculate(string s)
{
int i = 0, num = 0, result = 0;
char sign='+';
stack<int>nums;
for (; i < s.length(); i++)
{
if (isdigit(s[i]))num = num * 10 + (s[i] - '0');
if (!isdigit(s[i]) && !isspace(s[i]) || i == s.length() - 1)
{
if (sign == '+')nums.push(num);
else if (sign == '-')nums.push(-num);
else if (sign == '*')
{
int pre_num = nums.top();
nums.pop();
nums.push(pre_num * num);
}
else if (sign == '/')
{
int pre_num = nums.top();
nums.pop();
nums.push(pre_num / num);
}
num = 0;
sign = s[i];
}
}
while (!nums.empty())
{
result += nums.top();
nums.pop();
}
return result;
}
int main()
{
string expression;
cout << " 请输入一行整数计算式" << endl;
cout << " 例如:2*89-23*2-2324/4/2+1=" << endl;
cout << "(注:不支持带有括号的运算式)" << endl;
cout << " ";
getline(cin,expression);
cout << " 该计算式的结果为:" << calculate(expression) << endl;
return 0;
}
以上代码是通过栈来实现简易计算器的功能,但在第13行代码中“i==s.lenth()-1”,当时打成“i!=s.lenth()-1",导致计算的结果本来为“1+123=124”变为了“1+123=2”,但这个结果“2”,本人不知它是如何计算而来的,望大佬帮助一下,告知如何得到的这个结果,感激不尽。