#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++, и я должен использовать C-строки, а не строки.Я должен использовать функции стека, такие как push, pop, top.Код, как сейчас, будет считать [] правильным и] [неправильным, но помимо этого Он просто рассматривает все входные данные Этот код является тем, что у меня есть до сих пор, любая помощь будет оценена.
Что не работает? Какой вход не дает желаемого выхода? – John3136