编写c/c++函数,验证一个字符串形式的表达式中的括号是否匹配,其中括号包括圆括号、方括号和花括号。
编写c/c++函数,验证一个字符串形式的表达式中的括号是否匹配,其中括号包括圆括号、方括号和花括号。(2)编写main函数从键盘读入表达式,并调用你编写的函数。...
编写c/c++函数,验证一个字符串形式的表达式中的括号是否匹配,其中括号包括圆括号、方括号和花括号。(2) 编写main函数从键盘读入表达式,并调用你编写的函数。
展开
2个回答
展开全部
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;
}
可以自己试试,也可以自己完善一下程序
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询