我被问到作为奖励编程挑战,看看大括号是否匹配随机字符串或像这样的字符:{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}");
}
答案 0 :(得分:6)
是什么让你认为它什么都不做?确实如此。它会检查大括号,但是你没有对checkBraces
的返回做任何事情,btw应返回bool
,而不是int
。
你的意思可能是:
if (checkBraces ("{1+1}"))
cout << "matching";
else
cout << "not matching";
专业提示:了解如何使用调试器。在开始编码之前,你应该学习如何调试,而不是“你好世界”。
答案 1 :(得分:3)
作为对已经说过的内容的补充,我会说你可以减少代码量。无论如何,你把字符放入堆栈,为什么不使用std::stack<char>
?
您可以将大括号保存到另一个字符串中,以使用std::algorithms之一
自动比较它const std::string openingBraces("{[(");
const std::string closingBraces("}])");
if (std::find(openingBraces.begin(), openingBraces.end(), currentChar) != openingBraces.end())
yourStack.push(currentChar);
else if (std::find(closingBraces.begin(), closingBraces.end(), currentChar) != closingBraces.end())
{
// check if currentChar is matching the one on top of your stack
}
我没有写过所有内容,因为自己总能更好地找到答案。
答案 2 :(得分:2)
你应该做的最小值是打印checkBraces的结果。
答案 3 :(得分:1)
但它似乎没有做任何事情
确实有所作为。它会打印This program checks brace ([{}]) matching in a string.
。
您正在调用checkBraces ("{1+1}")
,但您没有对返回的值执行任何操作。由于这个调用可以被优化掉,从某种意义上说,你的程序似乎没有做任何事情。
所以让它做点什么。打印要测试的字符串,然后打印测试结果。一旦你完成了,你应该测试,当你完成它,你应该测试更多。不要仅仅测试{i+1}
等简单案例。测试应该通过的复杂案例,并测试应该失败的案例。
学习如何测试和学习如何调试与学习如何编写代码一样重要技能(如果不是更重要的技能)。