#include "cstack.h"
#include <iostream>
#include <cstring>
using namespace std;
bool isValidExpression (CStack&, char*);
int main (void)
{
char expression[21];
expression[0-21]=0;
cout<< "Enter an expression: ";
cin >>expression;
CStack stack1;
if (isValidExpression (stack1, expression)==true)
{
cout << "\nIt's a valid expression";
}
else
{
cout << "\nIt's NOT a valid expression";
}
return 0;
}
bool isValidExpression (CStack& stackA, char* strExp)
{
for(int a=0;a<21 && strExp[a]!=0;a++)
{
cout<<"Action A" <<endl;
stackA.push(strExp[a]);
}
/*if(strExp[a]=='}'||strExp[a]==']'||strExp[a]==')')
{
}
else*/
if(strExp[stackA.Top()]=='['||strExp[stackA.Top()]=='{'||strExp[stackA.Top()]=='(')
{
return false;
}
for(int a=stackA.Top();a>0;a--)
{
if(strExp[a]=='['||strExp[a]=='{'||strExp[a]=='(')
{
stackA.pop();
}
else if(strExp[a]==']')
{
for(int g=stackA.Top();g>0;g--)
{
if(strExp[a-1]=='[' && strExp[a-1]!=0)
{
stackA.pop();
g--;
break;
}
else if(strExp[a-1]==0)
{
return false;
}
}
}
else if(strExp[a]=='}')
{
for(int g=stackA.Top();g>0;g--)
{
if(strExp[a-1]=='{' && strExp[a-1]!=0)
{
stackA.pop();
break;
}
else if(strExp[a-1]==0)
{
return false;
}
}
}
else if(strExp[a]==')')
{
for(int g=stackA.Top();g>0;g--)
{
if(strExp[a-1]=='(' && strExp[a-1]!=0)
{
stackA.pop();
break;
}
else if(strExp[a-1]==0)
{
return false;
}
}
}
}
return true;
}
我在这个程序中要做的是输入一个由以下字符组成的语句:]、}、)、[、{、(。所有字符都像这样相互靠近的语句 ([])会是真的。(][) 不会是真的。[] 会是真的。[(]){{ 不会是真的。
这个程序是用 C++ 编写的,我必须使用 C 字符串而不是字符串。我必须使用诸如 push、pop、top 之类的堆栈函数。现在的代码将认为 [] 正确和 ][ 不正确,但除此之外它只认为所有输入都是正确的。这段代码是我到目前为止所拥有的,任何帮助将不胜感激。