導航:首頁 > 計算方法 > 括弧匹配的計算方法

括弧匹配的計算方法

發布時間: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

閱讀全文

與括弧匹配的計算方法相關的資料

熱點內容
瓷磚魚池漏水最簡單的補漏方法 瀏覽:14
智能化方法如何幫助開發軟體 瀏覽:360
卷閘門的開關安裝方法 瀏覽:793
汽車紐扣電池的安裝方法 瀏覽:890
鬥地主快速學會的方法 瀏覽:877
鋼梁安裝方法如何做撓度實驗 瀏覽:226
砂礫壓實度檢測方法 瀏覽:898
黑底白字解決方法 瀏覽:741
杭州電腦數據恢復方法 瀏覽:491
皮沙發的異味處理方法視頻 瀏覽:626
快速緩解頭痛的6個方法圖片 瀏覽:662
清除體內的氣有哪些方法 瀏覽:415
老人如何減肥的最好方法 瀏覽:886
面部神經痛的症狀和治療方法 瀏覽:611
無錫哪裡有臭氧注射治療方法 瀏覽:358
如何預防溺水的方法有多少種 瀏覽:675
dds精華使用方法 瀏覽:489
自動血糖儀的使用方法圖片 瀏覽:30
如何不用手指指人的三個方法 瀏覽:54
沉積學研究的基本方法 瀏覽:985