C++ 将值推入堆栈时出现Seg错误
我正在尝试使用文件内容作为输入和单独的操作数、括号和运算符。由于输入文件包含两行输入,我想我应该一次读取整行而不是一个值,因为我不想混淆这两行的值。我想做的是C++ 将值推入堆栈时出现Seg错误,c++,stack,C++,Stack,我正在尝试使用文件内容作为输入和单独的操作数、括号和运算符。由于输入文件包含两行输入,我想我应该一次读取整行而不是一个值,因为我不想混淆这两行的值。我想做的是 使用getline并将一行存储到名为input的字符串变量中 将字符串(使用空格作为分隔符)分解为段,并将它们放入名为tempContainer的堆栈中 将tempContainer.top()存储到临时变量中,并调用tempContainer.pop() 处理temp以将括号和操作数分开,并将它们存储到两个不同的变量中 在我尝试将最后一
A + B * (C - D * E) / F <-----The original line to break down. Line 1
A
+
B
*
(C
-
D
*
E)
/
F
AB * CDE + (RST - UV / XX) * 3 - X5 <-----Line 2
AB
*
CDE
+
(RST
-
UV
/
XX)
*
3
-
//Segmentation fault here
A+B*(C-D*E)/F你需要像这样的边界检查:
while(i < input.length() && input[i] != ' ')
{
substr2++;
i++;
}
while(i
您需要像这样的边界检查:
while(i < input.length() && input[i] != ' ')
{
substr2++;
i++;
}
while(i
缺少这么多代码,很难帮助您调试。例如,变量声明将是有用的。@GWW我害怕发布太多的东西,因为之前有人建议我直截了当地说。我会马上解决这个问题。您是否尝试过使用调试器单步执行代码,并检查I
的值与字符串长度的比较?您在for
循环之外迭代了i
很多次,但没有执行任何边界检查。@GWW我不这么认为。我假设,如果我可以确保使用cout语句正确地分隔字符串,那就好了。我删除了cout,很难用这么多缺少的代码来帮助您调试它。例如,变量声明将是有用的。@GWW我害怕发布太多的东西,因为之前有人建议我直截了当地说。我会马上解决这个问题。您是否尝试过使用调试器单步执行代码,并检查I
的值与字符串长度的比较?您在for
循环之外迭代了i
很多次,但没有执行任何边界检查。@GWW我不这么认为。我假设,如果我可以确保使用cout语句正确地分隔字符串,那就好了。我卸下了箱子谢谢!这正是我需要的!老实说,如果你在这里,我会主动提出给你买自助餐厅菜单上的所有东西作为午餐:D从我这里为你自己买点东西:)谢谢!这正是我需要的!老实说,如果你在这里,我会给你买自助餐厅菜单上的所有东西作为午餐:从我这里为你自己买点东西:)