#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 などのスタック関数を使用する必要があります。現在のコードでは、[] は正しく、][ は正しくないと見なされますが、それ以上はすべての入力が正しいと見なされます。このコードは私がこれまでに持っているものです。助けていただければ幸いです。