C++ 检查大括号是否匹配
c++ checking if braces match
我被要求作为额外的编程挑战,看看大括号是否在随机字符串或字符中匹配,如下所示:{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}");
}
是什么让你认为它什么都没做?确实如此。它检查大括号,但你没有对checkBraces
的返回做任何事情,顺便说一句,它应该返回一个bool
,而不是一个int
。
你的意思是:
if (checkBraces ("{1+1}"))
cout << "matching";
else
cout << "not matching";
专业提示:了解如何使用调试器。在开始编写"hello world"以外的任何内容之前,您应该学习如何调试。
作为已经说过的补充,我会说你可以减少代码量。无论如何,您将字符放入堆栈中,为什么不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
}
我没有写完所有东西,因为自己找到答案总是更好。
您应该做的最低限度是打印复选大括号的结果。
但它似乎什么也没做
它确实做了一些事情。它打印This program checks brace ([{}]) matching in a string.
.
您正在调用checkBraces ("{1+1}")
但您没有对返回的值执行任何操作。由于此调用可以优化,因此从某种意义上说,您的程序似乎没有执行任何操作是正确的。
所以让它做点什么。打印要测试的字符串,然后打印测试结果。一旦你这样做了,你应该测试,当你完成它时,你应该测试更多。不要只测试简单的案例,例如{i+1}
。测试应该通过的复杂案例,以及应该失败的测试用例。
测试和学习如何调试与学习如何编写代码一样重要(如果不是更重要的技能)。
相关文章:
- 检查输入是否不是整数或数字
- 检查值是否在集合p1和p2中,但不在p3中
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何检查线程是否锁定
- C++LDAP检查用户是否是特定组的成员
- 检查TCHAR数组输入是否为带符号整数C++
- 如何检查QList中是否存在值
- 检查函数返回类型是否与STL容器类型值相同
- 检查是否以特定精度给出双精度
- 检查向量是否具有所有可能的字符组合
- 检查注册表项是否链接到(或副本)另一个注册表项
- 地图计数确实很重要,或者只是检查是否存在
- 检查 2 棵树是否具有相同的顺序
- std::next 是否检查我们是否已经在容器的末尾?
- "!" "== 0"是否检查 int 是否是 0 的好做法?
- 我是否检查是否存在带或不带参数的宏函数
- dynamic_cast是否检查被查询对象的type_info对象,或者递归地检查
- 在VS2010中编译c++ 11中的代码时,std::function()是否检查类型
- 如果第二个参数"0",strcmp 是否C++检查字符串中的每个值?