试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.功能要求及说明:(1) 任意输入一个算术表达式;(2) 利用栈,判断表达式中出现的
来源:学生作业帮助网 编辑:六六作业网 时间:2024/07/19 20:49:04
试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.功能要求及说明:(1) 任意输入一个算术表达式;(2) 利用栈,判断表达式中出现的
试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.
功能要求及说明:
(1) 任意输入一个算术表达式;
(2) 利用栈,判断表达式中出现的括号是否配对出现,若括号序列是匹配的,提示:“匹配”;若不匹配,应报告错误的原因,如“左括号多余”或“右括号多余”或“左右括号不配对”等.
(3) 采用模块化设计.
测试数据
正确测例:();[()]; (())[]();[ ][(( ))]等
错误测例:(;);((;(]; [[( ))];(([]);[( ))]] 等
本人急用,回答正确者.再加100财富值
试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.功能要求及说明:(1) 任意输入一个算术表达式;(2) 利用栈,判断表达式中出现的
//最近的栈作业~
#include<iostream>
using namespace std;
class Stack
{
private:
int maxSize;
int top;
int *p;
public:
Stack(int size)
{
maxSize=size;
top=-1;
p=new int[maxSize];
}
~Stack()
{
delete [] p;
}
void Clear() //清空栈
{
top=-1;
}
bool Push(const int value) //压入
{
if(top==maxSize-1)
{
cout<<"栈满溢出"<<endl;
return false;
}
else
{
p[++top]=value;
return true;
}
}
bool Pop(int &value) //读取栈顶元素的值并删除
{
if(top==-1)
{
cout<<"栈为空,不能进行删除操作"<<endl;
return false;
}
else
{
value=p[top--];
return true;
}
}
bool Top(int &value) //读取栈顶元素的值并不删除
{
if(top==-1)
{
cout<<"栈为空,不能读取栈顶元素"<<endl;
return false;
}
else
{
value=p[top];
return true;
}
}
bool IsEmpty() //栈空否?
{
if(top==-1)
return true;
else
return false;
}
bool IsFull() //栈满否?
{
if(top==maxSize-1)
return true;
else
return false;
}
void show() //查看栈内元素的值
{
int t=top;
cout<<"栈内元素:"<<endl;
while(t+1)
cout<<p[t--];
cout<<endl;
}
};
void match()
{
int i=0,flag=1,temp,flag2=1;
char s[50];
char c;
Stack formula(10);
cout<<"输入一个式子:\n";
cin>>s;
c=s[i];
while(c&&flag)
{
if(c=='('||c=='['||c=='{')
{
formula.Push(c);
flag2=0;
}
else if(c==')'||c==']'||c=='}')
{
if(formula.IsEmpty())
{
flag=0;
break;
}
formula.Pop(temp);
if(temp==c-1||temp==c-2);
else
{
flag=0;
break;
}
}
c=s[++i];
}
if(!formula.IsEmpty())
flag=0;
if(flag2)
cout<<"无括号\n";
else if(flag)
cout<<"括号配对正确\n";
else
cout<<"括号配对错误\n";
}
int main()
{
match();
return 0;
}