C++ 使用堆栈查看两个字符串是否相等

C++ 使用堆栈查看两个字符串是否相等,c++,stack,lifo,C++,Stack,Lifo,目标是有两个字符串,在这个字符串中,有一个backspace按钮,表示为,您永远不会比较堆栈的所有元素。循环的i

目标是有两个字符串,在这个字符串中,有一个backspace按钮,表示为
,您永远不会比较堆栈的所有元素。循环的
i
会评估每个迭代,但您也会更改
a
每个迭代的大小。因此,每次迭代的比较如下:


  • 0破坏代码有两个具体问题

    第一个是在InputsEqual()中循环的第二个副本中,将inputA[i]的值推送到应该是inputB[i]的位置

    bStack.push(inputA[i]); // should be inputB!
    
    其次,在EqualStack()中,在每次迭代时调用.size(),同时将其与i进行比较。问题是,如果存在匹配项,还可以通过调用a.pop()来收缩堆栈。这会导致for循环提前中止,使堆栈不为空

    快速修复方法是将循环更改为在A为空时结束,如下所示:

    for(int i = 0; !a.empty(); i++) // fixed
    
    而不是:

    for(int i = 0; i < a.size(); i++) // broken
    
    以及:

    据我所知,空容器的pop()似乎未定义,因此在调用堆栈之前检查堆栈是否为空是一种良好的做法,只是没有必要使用后续的pop()语句!只要把它擦干净,你就应该很好

    最后,您可以避免InputOrb[i]!='\0'如果您只是在循环中检查InputOrb.length()而不是length()+1,那么:

    for(int i = 0 ; i < inputA.length() + 1; i++)
    {
        if(inputA[i] != '\0')
        {
            if(inputA[i] != '<')
            {
                aStack.push(inputA[i]);
            }
            else if(!aStack.empty())
            {
                aStack.pop();
            }
        }
    }
    
    for(int i=0;iif(inputA[i]!='欢迎使用堆栈溢出。花几分钟时间阅读有关如何调试代码的提示。不相关的(我认为):
    else{aStack.pop();}
    似乎是个坏主意。唯一的方法是堆栈为空。因此没有任何东西可以弹出。Boom。
    for(int i = 0; i < a.size(); i++) // broken
    
    return (a.empty() && b.empty()) ? true:false; // redundant
    return a.empty() && b.empty(); // better
    
    else if(!aStack.empty())
    {
        aStack.pop(); // you call it if the stack is empty
    }
    else
    {
        aStack.pop(); // and if its not, which is redundant!
    }
    
    for(int i = 0 ; i < inputA.length() + 1; i++)
    {
        if(inputA[i] != '\0')
        {
            if(inputA[i] != '<')
            {
                aStack.push(inputA[i]);
            }
            else if(!aStack.empty())
            {
                aStack.pop();
            }
        }
    }
    
    for(int i = 0 ; i < inputA.length(); i++)
    {
        if(inputA[i] != '<')
        {
            aStack.push(inputA[i]);
        }
        else if(!aStack.empty())
        {
            aStack.pop();
        }
    }