试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/09/22 14:33:17
试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.
功能要求及说明:
(1) 任意输入一个算术表达式;
(2) 利用栈,判断表达式中出现的括号是否配对出现,若括号序列是匹配的,提示:“匹配”;若不匹配,应报告错误的原因,如“左括号多余”或“右括号多余”或“左右括号不配对”等.
(3) 采用模块化设计.
测试数据
正确测例:();[()]; (())[]();[ ][(( ))]等
错误测例:(;);((;(]; [[( ))];(([]);[( ))]] 等
本人急用,回答正确者.再加100财富值
功能要求及说明:
(1) 任意输入一个算术表达式;
(2) 利用栈,判断表达式中出现的括号是否配对出现,若括号序列是匹配的,提示:“匹配”;若不匹配,应报告错误的原因,如“左括号多余”或“右括号多余”或“左右括号不配对”等.
(3) 采用模块化设计.
测试数据
正确测例:();[()]; (())[]();[ ][(( ))]等
错误测例:(;);((;(]; [[( ))];(([]);[( ))]] 等
本人急用,回答正确者.再加100财富值
//最近的栈作业~
#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 我这是书后作业题,要求实现栈,所以是自己定义的。
#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 我这是书后作业题,要求实现栈,所以是自己定义的。
试用C语言设计一个程序,程序的功能是接收任意输入一个算术表达式,判断表达式中的括号是否配对出现.
在Java中,设计一个算法,判断一个算术表达式中的括号是否配对.
编写一个判断算术表达式中开括号闭括号是否配对的算法
c语言加减乘除设计;大神改下要求写一个简单的计算器,输入一个数学表达式 程序输出结果.
C语言用栈写一个判断输入的表达式的括号是否正确的算法?
我用C语言写一个关于算术表达式求值的程序.(用数据结构中的栈知识)
2.循环向量中的循环队列.队列的长度公式是什么?如何判断一个算术表达式的园括号是否正确配对?
表达式括号匹配问题一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套,编写程序判断表达式中的括号是否正确匹配.输
从键盘输入一个表达式,判断它是否符合下面的语法规则 的c语言程序
算术表达式求值设计一个程序,利用栈实现算术表达式的求值要求:(1)以字符串形式输入语法正确算术表达式,参与运算的操作数为
10.试编写程序,对任意输入的一个算术表达式,将式中的数字和运算符分成两类(一类是数字,一类是运算符)
编写一个C语言程序实现判断任意输入的一个整数是几位数,并求每位的和.