一个编程菜鸟的小问题

#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”,本人不知它是如何计算而来的,望大佬帮助一下,告知如何得到的这个结果,感激不尽。

全部评论
“i!=s.lenth()-1"表示i不等于最长索引,每个i都使得“!isdigit(s[i]) && !isspace(s[i]) || i != s.length() - 1”为真,因为sign初始化为‘+’,加号前面的“1”push到nums里面,加号后面的“1”也会push进去,nums变成[1,1],此时“sign = s[i]”会导致sign变成字符‘1’,因为不是“+-*/”,后面的数字全部跳过了。
点赞 回复
分享
发布于 02-29 17:48 江苏

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务