因此,该程序的目标是读取代码的文本文件,并使用堆栈确保[], (), {}
均衡。
我必须阅读的第一个.txt文件如下:
{} }
一旦阅读,程序应返回一对匹配{ }
和一个不平衡符号}
(它成功完成!)
我必须阅读的second.txt文件如下:
{}
它应该返回一个余额,甚至是匹配{ }
的对(它成功完成!)
第三个文本文件应如下所示:
{ {}
它应该返回匹配的对{ }
(它做)和不平衡符号{
,(它没有' )。它只返回匹配{ }
的对(这是真的),但它也应该打印出不平衡{
。任何人都知道为什么它不能在这个特定情况下工作?
答案 0 :(得分:0)
在您编写的代码之后,您需要检查文件是否已达到eof但堆栈不为空。如果stack不为空,则必须将堆栈内容打印为不平衡。
在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;
}
}
}