gpt4 book ai didi

c++ - 字符串计算器 substr()

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:16 24 4
gpt4 key购买 nike

我正在创建一个字符串计算器,它应该是左关联的并且没有运算符优先级。我的主要问题是我在 switch 语句中的算法将我的字符串拆分为一个子字符串,然后将字符串的其余部分转换为另一个子字符串,即表达式的其余部分。例如,10+3*6 应该等于 78,但它首先计算 (3*6),然后加上 10,得到 28 的值,这是不正确的。有没有办法解决这个问题,以便从左到右评估字符串表达式?提前致谢!

#include<iostream>
#include<sstream>
#include<string>
#include<cctype>
#include<cmath>
using namespace std;

enum {PLUS='+',MINUS='-',MULT='*'};

int numberValue(string &expr)
{
istringstream is(expr);
int value = 0;
is >> value;
return value;
}


int expressionValue(string &expr)
{
for(int i = 0;i<expr.length();i++)
{
switch(expr.at(i))
{
case PLUS:
return expressionValue(expr.substr(0,i)) +
expressionValue(expr.substr(i+1,expr.length()-i-1));
case MINUS:

return expressionValue(expr.substr(0,i)) -
expressionValue(expr.substr(i+1,expr.length()-i-1));
case MULT:

return expressionValue(expr.substr(0,i)) *
expressionValue(expr.substr(i+1,expr.length()-i-1));
}
}

return numberValue(expr);
}

int main()
{
string expressionString;
cout << "Enter An expression: " << endl;
cin >> expressionString;
cout << expressionValue(expressionString) << endl;
return 0;
}

最佳答案

您可以反转过程,使递归从左向右移动:

#include<iostream>
#include<sstream>
#include<string>
#include<cctype>
#include<cmath>
using namespace std;

enum {PLUS='+',MINUS='-',MULT='*'};

int numberValue(string &expr)
{
istringstream is(expr);
int value = 0;
is >> value;
return value;
}


int expressionValue(string &expr)
{

for(int i=expr.length()-2;i>=0;i--) //assuming last character will not be an operand
{
{
switch(expr.at(i))
{
case PLUS:
return expressionValue(expr.substr(0,i)) +
expressionValue(expr.substr(i+1,expr.length()-i-1));
case MINUS:

return expressionValue(expr.substr(0,i)) -
expressionValue(expr.substr(i+1,expr.length()-i-1));
case MULT:

return expressionValue(expr.substr(0,i)) *
expressionValue(expr.substr(i+1,expr.length()-i-1));
}
}
}


return numberValue(expr);
}

int main()
{
string expressionString;
cout << "Enter An expression: " << endl;
cin >> expressionString;
cout << expressionValue(expressionString) << endl;
return 0;
}

关于c++ - 字符串计算器 substr(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17073979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com