根据图片中提供的代码,可以发现以下三处错误:
-
错误原因:条件判断语句的逻辑错误。
代码行:if (res.top() != e || res.empty())
(第7行)
问题:如果res
为空(res.empty()
为true
),res.top()
将被调用,尝试访问一个不存在的元素,从而导致访问违规(SEGV,Segmentation Fault)。 -
错误原因:数组索引越界。
代码行:for (int i < res.size(); i++)
(第18行)
问题:在循环中,使用res.size()
作为条件,但每次循环都会弹出栈顶元素,这会导致在下一次迭代之前栈的大小发生变化,因此i
的值可能不会与栈的实际大小同步,导致可能的无限循环或者错误的元素被添加到字符串t
中。 -
错误原因:通过索引修改
代码行:s[i] = res.top();(第20行)string
。
问题:在C++中,不能通过索引直接修改std::string
的单个字符。std::string
类的operator[]
是只读的,尝试赋值将导致编译错误。
一个简单的题目炸出来这么多基础错误,人都懵了,都是泪啊,还得练。