C括号匹配

点击查看代码

#include <stdio.h>
#include <string.h>
int top=-1;//top变量时刻表示栈顶元素所在位置
void push(char * a,int elem){
    a[++top]=elem;
}
void pop(char* a){
    if (top==-1) {
        return ;
    }
    top--;
}
char visit(char * a){
    //调取栈顶元素,不等于弹栈,如果栈为空,为使程序不发生错误,返回空字符
    if (top!=-1) {
        return a[top];
    }else{
        return ' ';
    }
}
int main() {
    int length,i,j,b[100000];
    char a[100000];
    char bracket[100000];
    scanf("%s",bracket);
    getchar();
    length=(int)strlen(bracket);
    for (i=0; i<length; i++) {
        //如果是左括号,直接压栈
        if  (bracket[i]=='(' && i+1<length) {
            push(a, bracket[i]);
            b[i] = 1;
        }else if (bracket[i]==')') {
                if (visit(a)=='(') {
                    pop(a);
                    b[i] = 0;
                    for(j = i;j>=0;j--){
                       if(b[j]==1)
                           break;
                    }
                    b[j]=i;
                }else{
                    return -1;
                }
         }
    }
    for(i=0;i<length;i++){
            if(b[i]!=0 && b[i]>i)
               printf("%d %d\n",i+1,b[i]+1);
    }
}

上一篇:C语言经典题目:求10000到100000的五位回文数。


下一篇:controlfile 备份到trace文件例子