C语言 判断括号()是否匹配
1、设计原理: 主要是利用了栈的结构,在表达式的输入过程中实现对括号是否匹配的判断。根据其括号的原则:小括号之中不能含有大括号或中括号,中括号中不能含有大括号。再由紧密性,左边括号和右边括号是紧密相连的。否则判断为错。 其操作为:每输入一个字符打一下回车,若输入括号顺序错误则跳出,并显示错误!2、例程:
#include #define MAX 100#define TRUE 1#define FALSE 0#define E a typedef struct transition /*建立一个栈*/ { char sq[MAX]; int top; }sqstack; sqstack bt;int emptysqstack(sqstack bt) /*判栈空*/ { if(bt.top==-1) return TRUE; else return FALSE; }void pushsqstack(sqstack bt,char sh) /*入栈*/ { if(bt.top==MAX-1) { printf("over flow"); exit(0); } bt.top++; bt.sq[bt.top]=sh; }void popsqstack(sqstack bt) /*出栈*/ { int sh; if(bt.top==-1) { printf("empty"); exit(0); } sh=bt.sq[bt.top]; bt.top--; return sh; }Search(sqstack bt) /*查找括号是否匹配*/ { char c=0; printf("If you want to break,please input 'a'
"); while(c!=E&&bt.top<=MAX&&c!='('&&c!='['&&c!='{') { c=getchar(); pushsqstack(bt,c); } SearchA(bt,c); SearchB(bt,c); SearchC(bt,c); }SearchA(sqstack bt,char c) /*查找小括号是否匹配*/{ if(c=='(') { while(c!=')'&&c!='['&&c!=']'&&c!='{'&&c!='}') { c=getchar(); pushsqstack(bt,c); } if(c=='(') printf("right
"); else if(c=='['||c==']'||c=='{'||c=='}') printf("wrong
"); } }SearchB(sqstack bt,char c) /*查找中括号是否匹配*/ { if(c=='[') while(c!=']'&&c!='('&&c!=')'&&c!='{'&&c!='}') { c=getchar(); pushsqstack(bt,c); } if(c==')'||c=='{'||c=='}') printf("wrong
"); else if(c=='(') SearchA(bt,c); else if(c==']') printf("right
"); else printf("wrong
"); } SearchC(sqstack bt,char c) /*查找大括号是否匹配*/ { if(c=='{') while(c!='}'&&c!='['&&c!=']'&&c!='('&&c!=')') { c=getchar(); pushsqstack(bt,c); } if(c==']'||c==')') printf("wrong
"); else if(c=='[') SearchB(bt,c); else if(c=='(') SearchA(bt,c); else if(c=='}') printf("right
"); else printf("wrong
"); } main() { int i; bt.top=-1; i=emptysqstack(bt); if(i) { Search(bt); } else exit(0); }
//这是我的用STL实现的检查字符串中的几个符号是否匹配的代码#include
#include
#include
using namespace std;
void main()
{
stack mystackda; //大括号
stack mystackxiao; //小括号
stack mystackjian; //尖括号
char s[30]="ABCD{()PPPL()}";
char *p=&s[0];
while( (*p)!='\0' ) //遍历字符串s
{
switch(*p)
{
case '{':
mystackda.push('{');
break;
case '}':
if (mystackda.empty())
{
goto over;
}
mystackda.pop();
break;
case '<':
mystackjian.push('<');
break;
case '>':
if (mystackjian.empty())
{
goto over;
}
mystackjian.pop();
break;
case '(':
mystackxiao.push('(');
break;
case ')':
if (mystackxiao.empty())
{
goto over;
}
mystackxiao.pop();
break;
}
p++;
}
if ( mystackda.empty() && mystackjian.empty() && mystackxiao.empty() )
{
cout<<"
字符匹配"<<endl;
}
else
{
over:cout<<"
字符不匹配"<<endl;
}
system("pause");
}
//【还待优化】
//【望采纳--现在急需分】
using namespace std;
#define maxsize 100;
#define T 10;
struct sqstack{
char *base;
char *top;
int stacksize;
};
sqstack inistack(sqstack &s){//初始化栈
s.base=new char[10];
if(!s.base)
cout<<"error";
s.top=s.base;
s.stacksize=maxsize;
return s;
}
sqstack push(sqstack &s,char &e){//进栈
if(s.top-s.base>=s.stacksize){
s.base=new char[10];
if(!s.base)
cout<<"error";
s.top=s.base+s.stacksize;
s.stacksize+=T;
}
*s.top=e;
s.top++;
return s;
}
sqstack pop(sqstack &s, char &e){//出栈
e=*s.top;
-- s.top;
return s;
}
int main(){
char *base,*top;
int total;
cout<<"请输入字符个数:";
cin>>total;
char a[total];
for(int i=0;i<total;i++){
cin>>a[i];
}
sqstack s;
inistack(s);
for (int j=0;j<total;j++){
if(a[j]=='(')
push(s,a[j]);
else if(a[j]==')')
pop(s,a[j]);
}
if(s.base==s.top)
cout<<"true";//匹配完后,如果栈为空,则括号匹配正确
else
cout<<"failed";
system("pause");
return 0;
}
char str[100];
int i, count = 0;
gets(str);
for (i = 0; str[i] != '\0' && count >= 0; i ++)
{
switch (str[i])
{
case '(':
count ++;
break;
case ')':
count --;
break;
}
}
if (count != 0)
printf("error\n");
else
printf("right\n");
简单啊 把这个字符串 遍历 统计 ( 和 )的数目 是否相同
假如这个整体都是一个字符串的话那左括号和右括号只代表一个字符,并没有对应关系!
有盼欣丰: #include <stdio.h> #include <stdlib.h>int main(int argc, char *argv[]) {char c;int i=0,n;int output[100];int lefts=0,leftm=0,leftb=0;int rights=0,rightm=0,rightb=0;while((c=getchar())!='*'){if(c=='\n'){if(lefts == rights && leftm == rightm && leftb ==...
阳曲县18892551749: 急求c语言编写的利用栈检验括号匹配的程序完整代码,谢谢啦~ - ?
有盼欣丰: 输入:串中只含有'(', ')'两个符号,判断是否括号匹配 并不需要真正的入栈、出栈,用top移动模拟即可 #include <stdio.h> int main() {char s[256], *p;int top = 0;scanf("%s", s); for(p=s; *p; p++){if(*p == '(')++top; //入else --top; //出if(top < 0)break; //无左括号与之匹配}if(!*p && !top)puts("Yes");else puts("No"); }
阳曲县18892551749: C语言 判断括号()是否匹配 - ?
有盼欣丰: char str[100]; int i, count = 0; gets(str); for (i = 0; str[i] != '\0' && count >= 0; i ++) {switch (str[i]){case '(':count ++;break;case ')':count --;break;} } if (count != 0)printf("error\n"); elseprintf("right\n");
阳曲县18892551749: 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...
阳曲县18892551749: 一道C语言题目:编写程序检查输入的算术表达式中括号是否配对,并显示出结果. - ?
有盼欣丰: if(c=='(') l++; else if(c==')') r++;if(l==r) printf("yes"); else printf("no");
阳曲县18892551749: c语言括号配对问题 - ?
有盼欣丰: #include#include int isPair(char *s) { int i,j=0,k=0; for(i=0;s[i]!='\0';i++) { if(s[i]=='(') j++; if(s[i]==')') k++; } if(j==k) return 1; return 0; } int main() { int n; char *s; scanf("%d",&n); s=(char*)malloc((n+1)*sizeof(char)); scanf("%s",s); if(isPair(s)) printf("...
阳曲县18892551749: 输入一行表达式,判断该表达式中的括号是否匹配.括号要求符合C++表达式的要求.若左括号与右括号匹配,则 - ?
有盼欣丰: #include <iostream> using namespace std; #define MAX_SIZE 50 typedef struct {int stack[MAX_SIZE];int top; }Stack; int main() {Stack st;st.top=-1;char ch;bool flag=false;while (cin>>ch){switch (ch){case '(':st.stack[++st.top]=ch;break;...
阳曲县18892551749: 判断圆括号是否配对用C语言如何实现 - ?
有盼欣丰: 如果只有圆括号(没有[ ] 或 { }),不需要构造一个栈.因为用栈实现时,栈里装的都是一模一样的左括号 '(' ,因此我们只需定义一个 整型变量 来记录 栈中元素的个数 即可.具体代码如下:#include <stdio.h> int main (void) { char input = 0;int ...
阳曲县18892551749: 编写一个测试程序,检查一个C语言程序中括号的配对情况.?
有盼欣丰: 头文件:(另存为SeqStack.h) typedef struct { DataType stack[MaxStackSize]; int top; } SeqStack; void StackInitiate(SeqStack *S) /*初始化顺序堆栈S*/ { S->top = 0; /*定义初始栈顶下标值*/ } int StackNotEmpty(SeqStack S) /*判顺序堆栈S非...
阳曲县18892551749: 括号匹配检验(c语言) - ?
有盼欣丰: 函数返回值类型不能是Status,Status只是泛指类型,至于具体用什么类型,你应该根据实际情况而定.比如你的第一个函数Status InitStack(SqStack &S) , 可以改为int InitStack(SqStack &S) ,其它的你自己根据情况定了.