在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
编写一个算法,检查一个程序中的花括号,方括号和圆括号是否配对,若能够全部配对则返回1,否则返回0。 Head.h: #ifndef HEAD_H_INCLUDED #define HEAD_H_INCLUDED #include<iostream> struct LinkedNode { int data; LinkedNode*next; };
class LinkedStack//链式栈的类定义 { public: LinkedStack(); ~LinkedStack(){makeEmpty();}; void Push(LinkedNode &); int Pop(); bool getTop(LinkedNode&x)const; bool IsEmpty()const{return (top==NULL)?true:false;} int getSize()const; void makeEmpty(); void print(); private: LinkedNode *top; };
#endif // HEAD_H_INCLUDED
Methods.cpp: #include"head.h" #include<iostream> using namespace std; LinkedStack::LinkedStack(){top=NULL;} void LinkedStack::makeEmpty() { LinkedNode*p; while(top!=NULL) { p=top;top=top->next;delete p; } } void LinkedStack::Push(LinkedNode &x) { LinkedNode *p=top; x.next=p; top=&x; } int LinkedStack::Pop() {int data=top->data; LinkedNode*p=top; top=top->next; delete p; return data; } bool LinkedStack::getTop(LinkedNode&x)const { if(IsEmpty()==true)return false; x=*top; return true; } int LinkedStack::getSize()const { int k=0; LinkedNode*p=top; while(p!=NULL){p=p->next;k++;} return k; } void LinkedStack::print() { cout<<"栈中元素个数="<<getSize()<<endl; LinkedNode*p=top;int i=0; while(p!=NULL) { cout<<++i<<":"<<p->data<<endl; p=p->next; } }
Main.cpp: #include"head.h" #include <iostream> #include<string.h> using namespace std; //所要求的判断括号匹配的算法 void PrintMatchedPairs(char *expression) { LinkedStack s1;LinkedStack s2;LinkedStack s3; int j,length=strlen(expression); cout<<"对于小括号()的情况:"<<endl; for(int i=1;i<=length;i++) { if(expression[i-1]=='('){LinkedNode t;t.data=i;s1.Push(t);}//左括号,位置进栈 else if(expression[i-1]==')') { if(s1.IsEmpty()==false){j=s1.Pop();cout<<j<<"与"<<i<<"匹配"<<endl;} else cout<<"没有与第"<<i<<"个右括号匹配的左括号!"<<endl; } } while(s1.IsEmpty()==false) { j=s1.Pop(); cout<<"没有与第"<<j<<"个括号相匹配的右括号!"<<endl; }
cout<<"对于中括号[]的情况:"<<endl; for(int i=1;i<=length;i++) { if(expression[i-1]=='['){LinkedNode t;t.data=i;s2.Push(t);}//左括号,位置进栈 else if(expression[i-1]==']') { if(s2.IsEmpty()==false){j=s2.Pop();cout<<j<<"与"<<i<<"匹配"<<endl;} else cout<<"没有与第"<<i<<"个右括号匹配的左括号!"<<endl; } } while(s2.IsEmpty()==false) { j=s2.Pop(); cout<<"没有与第"<<j<<"个括号相匹配的右括号!"<<endl; }
cout<<"对于大括号{}的情况:"<<endl; for(int i=1;i<=length;i++) { if(expression[i-1]=='{'){LinkedNode t;t.data=i;s3.Push(t);}//左括号,位置进栈 else if(expression[i-1]=='}') { if(s3.IsEmpty()==false){j=s3.Pop();cout<<j<<"与"<<i<<"匹配"<<endl;} else cout<<"没有与第"<<i<<"个右括号匹配的左括号!"<<endl; } } while(s3.IsEmpty()==false) { j=s3.Pop(); cout<<"没有与第"<<j<<"个括号相匹配的右括号!"<<endl; } } int main() { char s[100]; cout<<"请输入要判断的带有三种括号的字符串"<<endl; cin>>s; PrintMatchedPairs(s); return 0; }
运行结果:
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论