gpt4 book ai didi

C++ stringstream 函数没有正确返回

转载 作者:行者123 更新时间:2023-11-28 07:24:32 26 4
gpt4 key购买 nike

    #include <iostream>
#include <stack>
#include <string>
#include <sstream>

using namespace std;

stack<char> aStack;
stringstream result;
stack<char> operand1;
stack<char> operand2;


stringstream &postfixExp(string ch){
for(int i =0; i< ch.length(); i++)
{
if(ch[i]== '1' || ch[i]== '2' || ch[i]== '3' || ch[i]== '4' || ch[i]== '5' || ch[i]== '6' || ch[i]== '7' || ch[i]== '8' || ch[i]== '9' || ch[i]== '0' )
{
aStack.push(ch[i]);
}

else if( ch[i]== '+')
{
operand2.push(aStack.top());
aStack.pop();

operand1.push(aStack.top());
aStack.pop();

result << ( operand1.top() + operand1.top());
}

}

return result;
}

int main()
{
string postfix = " 2+3";

stringstream* answer = &postfixExp(postfix);
cout << "Result = " << answer->str() << endl;;


return 0;
}

大家好,有人知道我的代码有什么问题吗?我没有看到来自编译器的任何错误消息。但是当我运行它时它崩溃了。

我很难显示从函数中获得的结果。一开始想用stack函数,想不出怎么传值给main函数显示。

然后我想改用 stringstream 函数。遗憾的是,我仍然不知道如何显示相应的结果

我想知道是否有人能告诉我我的代码中哪一部分是错误的,或者是否有比使用 stringstream 或 stack 更好的方法来显示函数的结果

非常感谢!

最佳答案

正如已经指出的那样,错误是由于在 aStack 容器为空时调用 aStack.pop(); 引起的。这可能会产生未定义的行为,(在这种情况下)您可以将其观察为应用程序崩溃。

解释很简单,你一个字符一个字符地处理字符串"2+3":

for each character:
if it is digit:
push it to stack
if it is '+':
pop 2 elements

...那么您认为一旦到达'+' 符号,"2+3" 字符串会发生什么情况?


同时考虑重新设计:

stringstream result;

stringstream& postfixExp(string ch) {
...
return result;
}

...你正在返回对全局变量的引用,这意味着你要么不返回任何东西,要么变量不应该是全局的。更好的是,考虑只传递 std::string 对象(在函数中局部使用 stringstream):

std::string postfixExp(const std::string& expression) {
std::ostringstream resultStream;
...
return result.str();
}

关于C++ stringstream 函数没有正确返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967391/

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