我被问到作为奖励编程挑战,看看大括号是否匹配随机字符串或像这样的字符:{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)
是什么让你认为它没有做任何事情?确实如此.它会检查大括号,但你没有做任何事情的回报checkBraces,顺便说一下bool,应该返回一个,而不是一个int.
你是否意味着:
if (checkBraces ("{1+1}"))
cout << "matching";
else
cout << "not matching";
Run Code Online (Sandbox Code Playgroud)
专业提示:学习如何使用调试器.在开始编码之前,您应该学习如何调试,而不仅仅是"hello world".
但它似乎没有做任何事情
它确实做了一些事情。它打印This program checks brace ([{}]) matching in a string..
您正在调用checkBraces ("{1+1}"),但没有对返回值执行任何操作。由于可以优化此调用,因此从某种意义上来说,您的程序似乎没有执行任何操作,这是正确的。
所以让它做点什么。打印要测试的字符串,然后打印测试结果。完成此操作后,您应该进行测试,完成后,您应该进行更多测试。不要只测试简单的情况,例如{i+1}. 测试应该通过的复杂案例,以及应该失败的测试案例。
学习如何测试和学习如何调试与学习如何编写代码一样重要(如果不是更重要的技能)。