先放代码
点击查看代码
#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);
}
}