c ++检查大括号是否匹配

Ala*_*don 5 c++

我被问到作为奖励编程挑战,看看大括号是否匹配随机字符串或像这样的字符:{1 + 1}这将返回1,而{1 + 1})将返回0.这就是我所拥有的到目前为止,它似乎没有做任何事情.任何帮助都会很棒?谢谢

//bonus.cpp
#include <iostream>
#include <string>
#include <queue>
#include <stack>

using namespace std;

int checkBraces (string s)
{
    //int myLength = s.length();
    std::stack<int> stack;
    char d;

    for (int i = 0; i < s.length(); i++)
    {
        char c = s[i];

        if (c == '(')
        {
            stack.push(c);
        }
        else if (c == '[') 
        {
            stack.push(c);
        }
        else if (c == '{')
        {
            stack.push(c);
        }

        else if (c == ')')
        {
            if (stack.empty())
            {
                return false;
            }
            else
            {
                d = stack.top();
                stack.pop();
                if (d != '(')
                {
                    return false;
                }
            }
        }

        else if (c == ']')
        {
            if (stack.empty())
            {
                return false;
            }
            else
            {
                d = stack.top();
                stack.pop();
                if (d != '[')
                {
                    return false;
                }
            }
        }
        else if (c == '}')
        {
            if (stack.empty())
            {
                return false;
            }
            else
            {
                d = stack.top();
                stack.pop();
                if (d != '{')
                {
                    return false;
                }
            }
        }
    }

    if (stack.empty()) return true;
    else return false;

}


int main()
{
    cout << "This program checks brace ([{}]) matching in a string." << endl;

    checkBraces ("{1+1}");

}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 6

是什么让你认为它没有做任何事情?确实如此.它会检查大括号,但你没有做任何事情的回报checkBraces,顺便说一下bool,应该返回一个,而不是一个int.

你是否意味着:

if (checkBraces ("{1+1}"))
   cout << "matching";
else
   cout << "not matching";
Run Code Online (Sandbox Code Playgroud)

专业提示:学习如何使用调试器.在开始编码之前,您应该学习如何调试,而不仅仅是"hello world".


Dav*_*men 1

但它似乎没有做任何事情

它确实做了一些事情。它打印This program checks brace ([{}]) matching in a string..

您正在调用checkBraces ("{1+1}"),但没有对返回值执行任何操作。由于可以优化此调用,因此从某种意义上来说,您的程序似乎没有执行任何操作,这是正确的。

所以让它做点什么。打印要测试的字符串,然后打印测试结果。完成此操作后,您应该进行测试,完成后,您应该进行更多测试。不要只测试简单的情况,例如{i+1}. 测试应该通过的复杂案例,以及应该失败的测试案例。

学习如何测试和学习如何调试与学习如何编写代码一样重要(如果不是更重要的技能)。