鱼C论坛

 找回密码
 立即注册
查看: 2142|回复: 21

为什么提交会出现部分错误

[复制链接]
发表于 2023-3-12 16:26:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
设计一个算法,判断一个含有()、[]、{}三种类型括号的表达式中所有括号是否匹配。

输入格式:
输入一行字符串,如:(a+[b-c]+d)

输出格式:
如果括号匹配,输出“匹配", 否则输出"不匹配"








#include<bits/stdc++.h>
using namespace std;
string s,a;
int top=0;
int main()
{
        int n,i,j,flag=0;
        cin>>a;
        n=a.length();
        for(i=0;i<n;++i)
        {
                if(a[i]=='(' || a[i]=='['|| a[i]=='{')
                    s[++top]=a[i];
                else
                  if(a[i]==')')
                  {
                          if(top==0 || s[top--]!='(')
                        {
                                flag=1;
                                break;
                        }
                  }
                  else
                    if(a[i]==']')
                    {
                            if(top==0 || s[top--]!='[')
                            {
                                    flag=1;
                                    break;
                                }
                        }
         else
                    if(a[i]=='}')
                    {
                            if(top==0 || s[top--]!='}')
                            {
                                    flag=1;
                                    break;
                                }
                        }
        }
        if(top>0)
            flag=1;
        if(flag==1)
        {
                cout<<"不匹配";
        }
        else
        {
                cout<<"匹配";
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-12 17:08:26 | 显示全部楼层
倒数第十九行的 '}' 改成 '{'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-12 17:52:44 From FishC Mobile | 显示全部楼层
tommyyu 发表于 2023-3-12 17:08
倒数第十九行的 '}' 改成 '{'

还是错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-12 18:53:11 | 显示全部楼层
本帖最后由 ExiaGN001 于 2023-3-12 18:56 编辑

给一下评测地址,这边改完了,希望测一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-12 18:56:13 | 显示全部楼层
本帖最后由 ExiaGN001 于 2023-3-18 19:33 编辑
#include<bits/stdc++.h>
using namespace std;
//string s,a;
string a;
stack<char> s;
int main()
{
        int n,i,j,flag=0;
        int flg_br=0;
        cin>>a;
        n=a.length();
        for(i=0;i<n;++i)
        {
                if(a[i]=='(' || a[i]=='['|| a[i]=='{')
                        {s.push(a[i]);flg_br=1;}
                if(a[i]==')')
                {
                        if(s.empty()==1||s.top()!='(')
                        {
                                flag=1;break;
                        }
                        else s.pop();
                }
                if(a[i]==']')
                {
                        if(s.empty()==1||s.top()!='[')
                        {
                                flag=1;break;
                        }
                        else s.pop();
                }
                if(a[i]=='}')
                {
                        if(s.empty()==1||s.top()!='{')
                        {
                                flag=1;break;
                        }
                        else s.pop();
                }
        }
        if(!s.empty())
                flag=1;
        if(flag==1||flg_br==0)
        {
                cout<<"不匹配";
        }
        else
        {
                cout<<"匹配";
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-12 18:59:47 | 显示全部楼层
思路
1. 从左到右遍历字符串
2. 如果不是括号,默认是有效字符,遍历下一个字符
3. 如果是左括号,左括号进入栈,遍历下一个字符
4. 如果是右括号 当前栈是否还有左括号 没有则匹配失败 ...
5. 如果出栈的字符和当前字符匹配为一对括号,遍历下一个
6.不匹配,则匹配失败
7. 遍历完毕后,判断栈中是否还有剩余左括号 没有,匹配成功
#include <iostream>
#include <vector>
#include <map>
using namespace std;

map <char, char> bracket = { {'(', ')'}, {'{', '}'}, {'[', ']'} };

bool isValid(string str) {
        vector <char> stack;
        for (auto c: str) {
                if (c == '(' or c == '{' or c == '[') stack.push_back(c);
                else if (c == ')' or c == '}' or c == ']') {
                        if (bracket.size()) {
                                if (bracket[stack.back()] != c) return false;
                                else stack.pop_back();
                        }
                        else return false;
                }
        }
        return not stack.size();
}

int main(void) {
        cout << boolalpha << isValid("(a+[b-c]+d)");
        return 0;
}
true
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-3-12 19:00:12 From FishC Mobile | 显示全部楼层
ExiaGN001 发表于 2023-3-12 18:53
给一下评测地址,这边改完了,希望测一下

你进不去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-12 19:01:48 From FishC Mobile | 显示全部楼层
傻眼貓咪 发表于 2023-3-12 18:59

等晚点我试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-12 20:43:12 From FishC Mobile | 显示全部楼层
giegie666 发表于 2023-3-12 19:01
等晚点我试试

(a+[b-c]+d)  这只是一个测试用例,改成别的你这代码就是错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-12 20:46:06 | 显示全部楼层
giegie666 发表于 2023-3-12 20:43
(a++d)  这只是一个测试用例,改成别的你这代码就是错的

别的有例子吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-12 20:49:39 | 显示全部楼层

输入格式:
输入一行字符串,如:(a+[b-c]+d)
改成:(a+[b-c]+d}  输出的结果还是true
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-12 20:52:08 | 显示全部楼层
giegie666 发表于 2023-3-12 20:49
输入格式:
输入一行字符串,如:(a++d)
改成:(a++d}  输出的结果还是true

我测试了,我输出是 false, 完全没有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-12 20:56:35 | 显示全部楼层
giegie666 发表于 2023-3-12 20:49
输入格式:
输入一行字符串,如:(a++d)
改成:(a++d}  输出的结果还是true

你是在这里改的cout << boolalpha << isValid("(a+[b-c]+d)");
(a+[b-c]+d) 改成(a+[b-c]+d}吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-13 21:20:25 | 显示全部楼层


不试试怎么知道呢?
链接发一下
如果是主流OJ都能进的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-13 21:21:11 From FishC Mobile | 显示全部楼层
ExiaGN001 发表于 2023-3-13 21:20
不试试怎么知道呢?
链接发一下

你发给我吧,我试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-13 23:19:32 From FishC Mobile | 显示全部楼层
ExiaGN001 发表于 2023-3-12 18:56

这个还是通不过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-13 23:40:38 From FishC Mobile | 显示全部楼层
还有人帮帮忙吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-13 23:51:41 From FishC Mobile | 显示全部楼层
ExiaGN001 发表于 2023-3-13 21:20
不试试怎么知道呢?
链接发一下
如果是主流OJ都能进的

有种情况,如果没有括号,也会输出匹配,是不是这个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-15 06:52:01 | 显示全部楼层
giegie666 发表于 2023-3-13 23:51
有种情况,如果没有括号,也会输出匹配,是不是这个问题

没括号本来就该匹配啊(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-15 09:56:41 From FishC Mobile | 显示全部楼层
ExiaGN001 发表于 2023-3-15 06:52
没括号本来就该匹配啊(

这题改了应该是没括号就不匹配,有的题是匹配
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 13:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表