括号匹配

给定三种括号{ },[ ], ( ),和若干小写字母的字符串,请问改字符串的括号是否匹配(可以嵌套)?
输入格式:字符串s。 输出格式:若匹配,输出yes,否则输出no。
输入样例:{[a(v)d]q}
输出样例:yes
// 思路 创建两个栈是不行的 还是得一个栈 然后最后计算原本字符长度和栈的长度都为0
// 那就是匹配的!


#include<stdio.h>
#include<string.h>

#define M 64
// 假如不让用 用一个数组来模拟栈
int totalR(char s[], int n);
void verify(char s[], int n);

typedef  struct Stack {
    char s[M] = {' '};
    int top = -1;
} stack; // 记得最后有个分号



int main() {
    char s[M];
    scanf("%s",s);
    printf("%s",s);
    int n = strlen(s);
    verify(s,n);
    return 0;
}

void verify(char s[], int n) {
    stack sta;
    int i = 0;
    int right = totalR(s, n);
    while(i<n) {
        // 如果不是字母 数字 那么就是括号
        if(s[i] == '{' ||s[i] == '[' ||s[i] == '('||
           s[i] == '}' ||s[i] == ']' ||s[i] == ')') {
            if(s[i] == '{' ||s[i] == '[' ||s[i] == '(' ) {
                sta.top = sta.top + 1;
                sta.s[sta.top] = s[i];
                i++;
            } else if(!((s[i] == '}'&& sta.s[sta.top] == '{')||
                        (s[i] == ']'&& sta.s[sta.top] == '[')||
                        (s[i] == ')'&& sta.s[sta.top] == '('))) {
                // 这里需要和原字符进行比较 遇到了右括号
                break;
            } else {
                sta.top--;
                right--;
                i++;
            }
        } else {
            i++;
        }
    }
        
    if(sta.top==-1 && right==0){
        printf("Yes!");
    }
    else{
        printf("No!");
    }
}

int totalR(char s[], int n){
    int r_count = 0;
    for(int i = 0; i < n ; i++){
        if(s[i] == '}' ||s[i] == ']' ||s[i] == ')')
        r_count = r_count + 1;
    }
    return r_count;
} 

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容