抛弃现实主义拥抱永恒幻想 2022-06-02 09:27 采纳率: 0%
浏览 30

简短出入栈代码找bug

img

#include<iostream>
#include<stack>
using namespace std;
int main()
{
    char a[] = { "abcdefg" };
    stack<char>s;
    int k = 0;
    char c;
    while (k < 7) {
        cin >> c;
        if (!s.empty() && c < s.top())break;
        while (s.empty() || c != s.top()) {
            s.push(a[k++]);
        }
        if (c == s.top())s.pop();
        if (k == 7) {
            if (s.empty())goto label;
            while (cin >> c) {
                if (c != s.top())goto label;
                else s.pop();
                if (s.empty())goto label;
            }
        }
    }
    label:
    if (!s.empty())cout << "Fasle" ;
    else cout << "True" ;
}

平台总是有一个数据不给过,手动测试的数据都已通过,实在是崩溃了

说一下思路:如果栈为空或者输入的字符不等于栈顶字符就一直按abcdefg序列进栈,如果输入的字符等于栈顶字符就出栈,
当k==7就是七个字符均已进栈之后就判断每次输入的字符是否与栈顶指针相同即可,一旦不同就输出false,直到栈空。

我希望有人能找出代码中存在的漏洞,甚至提供一种更简洁的代码或思路,毕竟用了好多goto

  • 写回答

1条回答 默认 最新

  • 於黾 2022-06-02 10:36
    关注

    如果永远先入先出,那么就没这个题了,因为不管什么时间出栈,都不改变顺序,所以永远是abcdefg
    但是栈是先入后出的,那么不同时间出栈将造成顺序改变
    比如a刚进来就出去,那么a就排第一个了
    如果先入了a,b,然后都出来,前面就变成了b,a
    如果b出来之后又入了c,那么会先出c,最终是b,c,a
    但是绝对不可能先出c,再a,最后b
    观察规律
    其实就是先列出abcdefg,从任意位置开始输出,如果要输出它右边的字符,可以跳过任意字符输出,如果要输出左边字符,则必须按顺序输出
    只要输出满足这个规律就是正确的,不满足就是错误的

    评论

报告相同问题?

问题事件

  • 创建了问题 6月2日

悬赏问题

  • ¥15 如果我想学习C大家有是的的资料吗
  • ¥15 根据文件名称对文件进行排序
  • ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓
  • ¥15 有人会用py或者r画这种图吗
  • ¥15 MOD04_3K图像预处理
  • ¥15 [VASP]关于超胞大小和k 点网格的收敛性测试
  • ¥15 pip下载paddle2onnx离谱错误
  • ¥60 db2move nlzxams import 导出db2备份数据报错
  • ¥15 关于#python#的问题:全文总结功能咨询
  • ¥15 俄罗斯方块中无法同时消除多个满行