我正在写一个简单的支架检查器。应该很容易。当它全部在一个函数中时,我有它的工作,但我还需要为stdin做些事情。所以我认为最好做2个功能。这就是说,我在检查第82行的堆栈是否为空时出错。无论出于何种原因,它不允许我检查堆栈的顶部是否为空。我在一个测试程序中尝试了解它是否是某种引用错误,或者是否通过其他方法超出了范围。不是。应该正常工作,因为它是一个全局变量。为什么我不能检查我的堆栈上有什么?
关于我在做什么错的想法?我所有的知识和知识都指出我正确地做到了这一点。
以下是所有的代码。它的可编译。如果我需要澄清任何我会更乐意去做的事情。
感谢
#include <iostream>
#include <sstream>
#include <stack>
#include <deque>
#include <fstream>
#include <cstdlib>
using namespace std;
stack<char> BracketsCheck;
int linecounter = 0;
int FileNumber = 1;
int pos;
string str ="";
string filename;
int validate(string string)
{
int size = str.size();
for (int i = 0; i < str.size(); i++)
{
pos = i;
if ((str[i] == '(') || (str[i] == '[') || (str[i] == '{'))
{
BracketsCheck.push(str[i]);
}
else if (str[i] == ')')
{
if (BracketsCheck.top() == '(')
BracketsCheck.pop();
else
{
cout << filename << ":" << linecounter << ":" << pos << "ERROR: missing open parenthesis" << endl;
return EXIT_FAILURE;
}
}
else if (str[i] == ']')
{
if (BracketsCheck.top() == '[')
BracketsCheck.pop();
else
{
cout << filename << ":" << linecounter << ":" << pos << "ERROR: missing open squre bracket" << endl;
return EXIT_FAILURE;
}
}
else if (str[i] == '}')
{
if (BracketsCheck.top() == '{')
BracketsCheck.pop();
else
{
cout << filename << ":" << linecounter << ":" << pos << "ERROR: missing open curly brace" << endl;
return EXIT_FAILURE;
}
}
}
}
int main(int argc, char* argv[])
{
// BracketsCheck.top() = 'h';
if (argc == 1)
{
cin >> str;
cout << "no arguments" << endl;
validate (str);
return 0;
}
else
{
while (argv[FileNumber] != NULL)
{
filename = argv[FileNumber];
ifstream inFile(argv[FileNumber]);
cout << argv[FileNumber]<<endl;
while (getline(inFile, str))
{
validate(str);
linecounter++;
}
if (BracketsCheck.top() != NULL)
{
cout << "got to null checker" << endl;
cout << filename << ":" << linecounter << ":" << pos << "umatched closing brace" << endl;
return EXIT_FAILURE;
}
FileNumber++;
}
return 0;
}
}
是的,字符串字符串只是我写的时候创建的一个临时变量,绝对要回去改变它。但我会尝试空()的东西,看看它是否工作 – cmonnats23
无论出于何种原因,这是有效的。不知道为什么'!BracketsCheck.empty()'与BracketsCheck.top()!= NULL'有任何不同,但它确实如此。任何想法为什么?此外,如果您将您的评论写入答案,则将您标记为正确答案。谢谢! – cmonnats23