导航:首页 > 计算方法 > 括号匹配的计算方法

括号匹配的计算方法

发布时间:2022-06-01 22:11:59

A. 括号匹配

楼主,你能具体说下,你想达到什么样的效果吗
这可能是道题,可我没有见过
-----------------------------------
恩,知道了,我修改了一下,你原来的程序有几个错误:
1. if(j==0) printf("yes");break;
没有加括号,应该是 if(j==0) { printf("yes");break; }
2. while(a[i+1]!='\0');
这个不对,应该是a[i-1],你仔细想想,还有就是'\0'字符不能从键盘上获得,应该改成‘\n’--回车键来结束循环输入
3. if((b[j]==c[k])
应该是b[j-1]==c[k]
程序修改如下:
-------------------------------------------------
#include"stdio.h"
main()
{
int i=0,j=0,k=0;
char a[20],b[20],c[20];
do
{
a[i]=getchar();
if(a[i]=='(')
b[j]=')',j+=1;
if(a[i]=='[')
b[j]=']',j+=1;
if(a[i]=='{')
b[j]='}',j+=1;
if(a[i]==')')
c[k]=')',k+=1;
if(a[i]==']')
c[k]=']',k+=1;
if(a[i]=='}')
c[k]='}',k+=1;
i++;
} while(a[i-1]!='\n');
k=0;
printf("%d\t",j);
while(1)
{
if((b[j-1]==c[k]))
{
if(j==0)
{
printf("yes\n");
break;
}
j-=1,k+=1;
}
else
{
printf("no\n");
break;
}
}
}

B. c语言括号匹配

有些特殊解没考虑:当左括号溢出的时候(即左括号大于右括号)

如:

//在一个合法的括号匹配 左边 加上 不比最外层括号小 的括号 程序将输出错误。

{ //以及单单一个[,(,<,其实就是在合法的空串外面加左括号
[[[] //在合法的[]左边加上[
{<<>> //在合法的<<>>左边加{

C. 如何用c语言实现括号匹配的问题

先按顺序取出所有的括号.然后循环删除_相邻的_差为一或二的_点.最后如果表空则匹配.
单向链表:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 80
typedef struct list{
char node;
struct list* next;
}list,*plist;

void iniList(plist);
int isEmpty(plist);
int listAppend(plist,char);
int delBracketsFormList(plist);

int main(int argc,char* argv[]){
char test[LEN];
int i;
list a;
plist p;
p=&a;
iniList(p);
scanf("%80s",test);
for (i=0;i<LEN;i++){
switch(test[i]){
case '[': case']': case'{': case'}': case'(': case')':
listAppend(p,test[i]);
break;
default:continue;
}
}
delBracketsFormList(p);
if (isEmpty(p)){
printf("括号匹配!\n");
}
else
printf("括号不配对!\n");
return 0;
}

void iniList(plist aplist){
aplist->next=NULL;
aplist->node='\0';
}

int isEmpty(plist aplist){
return aplist->next==NULL?1:0;
}

int listAppend(plist aplist,char a){
plist bplist=aplist,anode;
while (bplist->next){
bplist=bplist->next;
}
anode=(plist)malloc(sizeof(list));
if (!anode)exit(-1);
anode->node=a;
anode->next=NULL;
bplist->next=anode;
return 0;
}
int delBracketsFormList(plist aplist){
plist temp;
int has=1;
if (isEmpty(aplist))
return 0;
while(has){
has=0;
temp=aplist;
while (temp->next){
if(temp->next->next){
if((temp->next->next->node - temp->next->node == 1)||(temp->next->next->node - temp->next->node == 2)){
temp->next = temp->next->next->next;
has=1;

}
else
temp = temp->next;
}
else
temp =temp->next;
if(!has)break;
}

}
return 0;
}

D. 检验括号匹配的算法

bool braceMatg(const char* str){
int brace=0;
for (int i=0; i<strlen(str); i++) {
if (str[i]=='(') {
brace++;
}else if(str[i]==')'){
brace--;
}
if (brace<0) {
return false;
}
}
if (brace==0) {
return true;
}
return false;
}
int main()
{
char str[1000];
while (true) {
memset(str, 0, sizeof(str));
if (!cin.getline(str, 1000, '\n')) {
break;
}
cout<<braceMatg(str)<<endl;
}

return 0;
}

E. 括号匹配 基本算法

用栈的数据结构

先读入一个括号,如果为左括号,入栈,否则,出错退出
继续读入括号,如果是右括号,检查栈,如果非空,出栈(因为不把右括号入栈,所以栈里面都是左括号),如果空,出错退出

直到读完处理完最后一个括号,如果这个时候栈为空,那么成功返回true,否则返回false

阅读全文

与括号匹配的计算方法相关的资料

热点内容
辣椒碱检测方法 浏览:38
乌药种植方法 浏览:177
平常如何侧方入库最笨方法 浏览:490
踝骨软化锻炼方法 浏览:421
如何活到极致的方法 浏览:599
平面图钢筋计算方法 浏览:675
用什么方法给小孩做棉裤 浏览:597
鲢鱼怎么做才好吃简单的方法火锅 浏览:638
和田籽料二上色的鉴别方法 浏览:715
圣荷纳米霜使用方法 浏览:168
货车多利卡打不着火解决方法 浏览:395
韩束紧致水分面膜使用方法 浏览:113
摩托车前叉连接方法 浏览:428
交流和直接的电流计算方法 浏览:465
龟田锻炼身体的方法 浏览:767
曾仕强怎么使自己开悟的方法 浏览:253
大拇指甲沟炎治疗方法 浏览:911
高中数学解题方法技巧汇总 浏览:332
u盘扩展内存方法手机 浏览:37
除螨包的最佳方法 浏览:25