//不是很严谨,不过你可以参考.
#include
#include
#include
using namespace std;
const int MaxSize = 200;
class MyStack
{
private:
char stack[MaxSize];
char* top;
int len;
public:
MyStack();
void InitStack();
void Push(char item);
char Pop( );
char Peek();
bool IsEmpty();
void ClearStack();
};
MyStack::MyStack()
{
InitStack();
}
void MyStack::InitStack()
{
len = 0;
top = stack;
}
void MyStack::Push(char item)
{
if (len < 100)
{
stack[len] = item;
top = &stack[len];
len++;
}
else
{
cout << "The stack is full." <
}
char MyStack::Pop( )
{
if (!IsEmpty())
{
char tmp = *top;
top = &stack[len - 1];
len--;
return tmp;
}
else
{
cout << "The stack is empty." <
}
}
char MyStack::Peek()
{
if (!IsEmpty())
{
return *top;
}
else
{
cout << "The stack is empty." <
}
}
bool MyStack::IsEmpty()
{
cout << "the length of stack is " << len << endl;
return len < 0;
}
void MyStack::ClearStack()
{
len = 0;
top = stack;
}
int main()
{
MyStack myStack;
ifstream fin;
string strLine;
bool result = false;
myStack.InitStack();
fin.open("test.txt");
if(fin.fail())
{
cout << "File open error!";
exit(1);
}
int i = 0;
while(getline(fin,strLine)) //读取行,检查{}是否配对
{
i = 0;
while( '\0' != strLine[i])
{
if ('{' == strLine[i])
{
myStack.Push('{');
}
else if ('}' == strLine[i] && '{' == myStack.Peek())
{
myStack.Pop();
}
i++;
}
}
result = !(myStack.IsEmpty()); //如果栈为空,刚说明配对.
cout << result << endl;
return 0;
}