文章

72

粉丝

142

获赞

5

访问

57.5k

头像
括号匹配 为什么一个个样例输入判断正确 5个一起就错误
我要提问
发布于2024年3月6日 19:26
阅读数 612

#include<iostream>
#include<stack>
#include<string>
using namespace std;

int priority(char c) {
    if (c == '{') return 4;
    else if (c == '[') return 3;
    else if (c == '(') return 2;
    else return 1;
}


int main() {
    int n;
    cin >> n;
    while (n--) {
        string str;
        getchar();
        getline(cin,str);
        
        stack<char> s;
        int flag = 1;
        for (int i = 0; i < str.size();i++) {
            if (s.empty()) {//栈为空,直接入栈
                s.pus...

登录查看完整内容


登录后发布评论

7 条评论
snake VIP
2024年3月6日 20:38

输入格式问题,不要轻易用getchar这个函数,特别是和其他输入函数混用

赞(0)

DestinyCares+++ : 回复 snake: 好的 但是改过来还是20%

2024年3月7日 09:40

snake : 回复 DestinyCares+++: cin>>str

2024年3月7日 11:03

DestinyCares+++ : 回复 snake: #include<iostream> #include<stack> #include<string> using namespace std; int priority(char c) { if (c == '{') return 4; else if (c == '[') return 3; else if (c == '(') return 2; else return 1; } int main() { int n; cin >> n; while (n--) { string str; cin >> str; stack<char> s; int flag = 1; for (int i = 0; i < str.size(); i++) { if (s.empty()) {//栈为空,直接入栈 s.push(str[i]); } else {//栈不为空 if (str[i] == '{' || str[i] == '[' || str[i] == '(' || str[i] == '<') { char c = s.top(); if (c == '{' || c == '[' || c == '(' || c == '<') { if (priority(c) > priority(str[i])) { s.push(str[i]); } else {//非法 flag = 0; break; } } else { s.push(str[i]); } } else {//右括号 char c = s.top(); if ((c == '{' && str[i] == '}') || (c == '[' && str[i] == ']') || (c == '(' && str[i] == ')') || (c == '<' && str[i] == '>')) s.pop(); else s.push(str[i]); } } } if (s.empty() && flag == 1) { cout << "YES" << endl; } else cout << "NO" << endl; } return 0; } 还是不对

2024年3月7日 14:19

snake : 回复 DestinyCares+++: 算法逻辑优先级的处理有问题

2024年3月7日 14:36

DestinyCares+++ : 回复 snake: 哪里?

2024年3月7日 14:47

snake : 回复 DestinyCares+++: 按运算规则,从外到内的括号嵌套顺序为:大括号->中括号->小括号->尖括号。

2024年3月7日 16:23