gpt4 book ai didi

c++ - 将单个字符串分成多个堆栈

转载 作者:太空宇宙 更新时间:2023-11-04 15:06:34 25 4
gpt4 key购买 nike

我想做的是获取一个字符串,比如说“((4+2)/2)”,然后对其求值,返回 3。我应该通过将字符串分成三个独立的堆栈来实现这一点。 . 一种用于左括号“(”,一种用于数字“0”-“9”,一种用于运算符“+”“-”“*”“/”和“%”。

我遇到的问题实际上是将字符串分成堆栈。我的代码如下:

//The evaluate function takes a string containing an arithmetic expression,
//evaluates it,and returns its result
int evaluate(string exp)
{
stack<char> parStack;
stack<int> numStack;
stack<char> opStack;

int j = exp.size();
int i=0;
char x;

//for (i=0; i<j; i++)
//{
while (i<j)
{
if(exp[i] = '(')
{
parStack.push(exp[i]);
cout << exp[i] << endl; // just to see what is being pushed
}
if((exp[i]='0') || (exp[i]='1') || (exp[i]='2') || (exp[i]='3') || (exp[i]='4') || (exp[i]='5') || (exp[i]='6') || (exp[i]='7') || (exp[i]='8') || (exp[i]='9')) // I feel this is terribly inefficient
{
numStack.push(exp[i]);
}
if((exp[i] = '+') || (exp[i] = '-') || (exp[i] = '*') || (exp[i] = '/') || (exp[i] = '%'))
{
opStack.push(exp[i]);
}
i++;
}
//} // end for

return -1;

} // end evaluate

如您所见,我已经尝试使用 for 循环和 while 循环来解决这个问题,两者都给出了相同的结果。发生的事情是,出于某种原因,如果我输入“(5+3)”,它会打印出“((((((”)作为被推送的内容。为什么我的 if 语句会像这样重复自己?暂时忽略返回-1 最后,因为这将完成以实际评估字符串,一旦我可以有效地创建堆栈,我相信我可以处理。

最佳答案

你应该在你的if语句中使用两个“=”

if(exp[i] = '(')  //wrong (your code)
if(exp[i] == '(') //right

关于c++ - 将单个字符串分成多个堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13149907/

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