我正在寫一個簡單的支架檢查器。應該很容易。當它全部在一個函數中時,我有它的工作,但我還需要爲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