程序在特定场景下不输出所需的输出:堆栈和解析
Program not outputting desired output in specific scenario: stacks and parsing
所以这个程序的目标是读取一个代码的文本文件,并确保有一个均匀的平衡[], (), {}
,使用堆栈。
我必须读取的第一个.txt文件如下:
{} }
读取后,程序应返回一个匹配{ }
对和一个不平衡符号}
(它成功了!
我必须阅读的第二个.txt文件如下:
{}
它应该返回余额,甚至配对匹配{ }
(它成功地做到了!
第三个文本文件应如下所示:
{ {}
它应该返回一个匹配的对{ }
(它这样做)和一个不平衡符号{
,(它没有)。它只返回对匹配{ }
(这是真的),但它也应该打印出存在不平衡{
。有人知道为什么它在此特定情况下不起作用吗?
编写完代码后,您需要检查文件是否已到达 eof 但堆栈不为空。如果堆栈不为空,则必须将堆栈的内容打印为不平衡。
在 while 循环之后,
while(!STACK.empty()){
char b = STACK.top();
if(b == '(' || b == '{' || b== '['){
cout << b << "is unbalanced" << endl;
sameSymbol = false;
}
STACK.pop()
}
要解决行号查询,请执行以下操作:
bool sameSymbol = true;
stack <char> STACK;
char a, b;
while (true)
{
if(!textfile.get(a)) {
while(!STACK.empty()){
char b = STACK.top();
if(b == '(' || b == '{' || b== '['){
cout << b << "is unbalanced" << endl;
sameSymbol = false;
}
STACK.pop()
}
break;
}
// if a is a (, {, or [, push onto the stack
if (a == '(' || a == '{' || a == '[')
{
STACK.push(a);
}
// if a is a ), }, or ]
else if (a == ')' || a == '}' || a == ']')
{
//if the stack is empty, return false
if (STACK.empty())
{
cout << "unbalanced symbol " << a << " at line " << endl;
sameSymbol = false;
break;
}
b = STACK.top();
STACK.pop();
if (TestIfMatching(a, b))
{
cout << "pair matching " << b << " and " << a << endl;
sameSymbol = true;
}
// if a and b are not matching parenthesis return false
if (!TestIfMatching(a, b))
{
cout << "unbalanced " << a << " symbol at line " << endl;
sameSymbol = false;
break;
}
}
}
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 提升::堆栈跟踪::safe_dump_to输出大小
- 如何使用方法覆盖在输出屏幕上显示堆栈整数值
- 自定义堆栈上 std::string 数据的输出
- 如何在 C++ 中将从文本文件中读取的元素推送和弹出到数组中,并按 Revserse 顺序输出堆栈?
- 类最小堆栈未给出输出
- 从堆栈中读取字符后,如何修复不正确的文件输出
- 当程序与符号名称一起崩溃时,输出呼叫堆栈
- C 堆栈实现意外输出
- 在Visual Studio 2013 C++中使用GLUT渲染Kinect输出(堆栈溢出)
- stl数据结构的堆栈上输出参数与返回值的效率
- 程序在特定场景下不输出所需的输出:堆栈和解析
- 为什么这是此异常堆栈的输出
- 如何从opfile输出中获取调用堆栈
- c++程序成功构建,没有输出,只显示堆栈跟踪