试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.

问题描述:

试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.
功能要求及说明:
(1) 任意输入一个算术表达式;
(2) 利用栈,判断表达式中出现的括号是否配对出现,若括号序列是匹配的,提示:“匹配”;若不匹配,应报告错误的原因,如“左括号多余”或“右括号多余”或“左右括号不配对”等.
(3) 采用模块化设计.
测试数据
正确测例:();[()]; (())[]();[ ][(( ))]等
错误测例:(;);((;(]; [[( ))];(([]);[( ))]] 等
本人急用,回答正确者.再加100财富值
1个回答 分类:综合 2014-12-10

问题解答:

我来补答
//最近的栈作业~
#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;
}
再问: 亲 这个你没做到吧 利用栈,判断表达式中出现的括号是否配对出现,若括号序列是匹配的,提示:“匹配”;若不匹配,应报告错误的原因,如“左括号多余”或“右括号多余”或“左右括号不配对”等。 ?????????????????????
再答: //额,没注意。。。。。
//栈不改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())            {                cout<<"右括号多余\n";                flag=0;                break;            }            formula.Pop(temp);            if(temp==c-1||temp==c-2);            else            {                cout<<"左右括号不配对\n";                flag=0;                break;            }        }        c=s[++i];    }    if(!formula.IsEmpty())        {flag=0;cout<<"左括号多余\n";}    if(flag2)        cout<<"无括号\n";    else if(flag)        cout<<"匹配\n";}int main(){    match();    return 0;}
再问: nice。 阿里嘎多
再答: 其实栈可以用STL的库函数实现,这样比较方便,只需要加头文件就行了。include 我这是书后作业题,要求实现栈,所以是自己定义的。
 
 
展开全文阅读
剩余:2000