编写c/c++函数,验证一个字符串形式的表达式中的括号是否匹配,其中括号包括圆括号、方括号和花括号。

编写c/c++函数,验证一个字符串形式的表达式中的括号是否匹配,其中括号包括圆括号、方括号和花括号。(2)编写main函数从键盘读入表达式,并调用你编写的函数。... 编写c/c++函数,验证一个字符串形式的表达式中的括号是否匹配,其中括号包括圆括号、方括号和花括号。(2) 编写main函数从键盘读入表达式,并调用你编写的函数。 展开
 我来答
fallen915
2012-04-15 · TA获得超过132个赞
知道答主
回答量:45
采纳率:0%
帮助的人:15.5万
展开全部
C的话,大概的思路是 用数组接收字符串,按顺序提取出各种括号(if语句),左边的放一起,右边的放一起(可以用栈存储,要是没学过用数组也行),然后就开始匹配(用个循环,左右两边要匹配,要是有一组不成功则直接return),当然,你可以自己在开始循环之前设定一些筛选条件,例如两边总数不一样肯定就不匹配了,直接return掉……可以自己试试
追问
知道大概思路,但是代码不会编写。。。可以写下完整的代码吗
追答
//大致的思路是,要是遇到(、{、[则入栈,要是)、}、]则取栈顶元素进行匹配,其他字符直接continue,最后栈空则匹配成功
#include
#include
typedef struct{
char *base;
char *top;
int size;
}snode;
bool match(char *p){
snode s;
int i;
i=0;
s.base=(char *)malloc(20 * sizeof(char)); //初始化一个栈
if(!s.base){
printf("内存空间不足\n");
return false;
}
s.top=s.base;
s.size=20;
while(p[i]!='\0'){ //开始循环 “\0”是字符串的结束标志
if((p[i]=='{')||(p[i]=='[')||(p[i]=='(')){ //筛选 ‘(’、‘{’、‘[’进栈
if(s.top-s.base>=s.size){ //入栈判栈满
printf("栈满\n");
return false;
}
*(s.top)=p[i];
s.top++;
i++;
}else{
switch(p[i]){
case ')' : if(s.base==s.top){ //遇到‘)’‘}’‘]’则开始匹配,要是栈顶元素能匹配成功,则继续,否则直接return,里面的一些条件可以自己想想
return false;
}else if(*(--s.top)=='('){
i++;
continue;
}else{
return false;
}
case '}' : if(s.base==s.top){
return false;
}else if(*(--s.top)=='{'){
i++;
continue;
}else{
return false;
}
case ']' : if(s.base==s.top){
return false;
}else if(*(--s.top)=='['){
i++;
continue;
}else{
return false;
}
default : i++; //剔除其他符号
continue;
}
}
}
if(s.top==s.base) //匹配成功则最后栈空
return true;
else
return false;
}
int main(){
char str[50];
int i=0;
char *p;
p=str;
printf("请输入字符串:");
gets(str);
if(match(p))
printf("匹配成功!\n");
else
printf("匹配失败……\n");
return 0;
}
可以自己试试,也可以自己完善一下程序
英雄城市联盟3093
2012-04-15 · 超过12用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:40.4万
展开全部
数据结构的程序吧!要用自己写的栈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式