验证打开和关闭括号的数量
Verify the number of opening and closing brackets
本文关键字:验证 更新时间:2023-10-16
需要编写一个函数,以检查牙套在行中的有效性。如果开放括号对应于几乎相同的关闭,则该功能应返回true。输入字符串的示例:" (())) ()) ()
"
发布了两个解决方案的变体。哪一个更好,还有一种更好的方法来解决问题?
1:
bool parenthesis(char myString[80]) {
int k = 0;
for (int i = 0; myString[i]; ++i) {
if (myString[i] == '(')
k++;
if (myString[i] == ')')
k--;
}
if (k == 0)
return true;
else
return false;
}
2:
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::string str = "(()))())()";
std::cout << std::boolalpha
<< (std::count(str.begin(), str.end(), '(') ==
std::count(str.begin(), str.end(), ')') && *str.begin() ==
'(' && *str.rbegin() == ')')
<< std::endl;
}
这很容易通过为(
添加一个,为)
减去一个,而小心的总和永远不会消失。最后,它必须为零。
两者似乎都不是最佳的,因为它们会有效字符串为
()))((()
我可能会做计数的事情,但请另外检查数字始终是非负的。
bool validate_parantheses(const std::string& str)
{
int count = 0;
for(char c : str)
{
if(c == '(')
count++;
else if(c == ')')
count--;
if(count < 0)
return false;
}
return count == 0;
}
解决方案1更可读,允许您更容易修复错误(在两个解决方案中)。请参阅添加的"返回false"。
bool parenthesis(char myString[80]) {
int k = 0;
for (int i = 0; myString[i]; ++i) {
if (myString[i] == '(')
k++;
if (myString[i] == ')')
k--;
if (k<0) // This was missing from your original algorithm.
return false;
}
if (k == 0)
return true;
else
return false;
请注意,如果需要支持任何现实世界解析问题,例如不同类型的牙套:([[()]){} {} {{((())}}}
如果您遇到这样的问题,则提到的其他人可以更好地工作,因为您可以将开放式牙套推到堆栈上,当您找到近距离撑杆时,请将其弹出堆栈顶部并验证这是正确的类型。
相关文章:
- 正在尝试了解输入验证循环
- 如何在C++中检查2D数组中负值的输入验证
- LibGit2 SSH身份验证失败
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- constexpr上下文中std::initializer_list的验证
- 正在验证c++中用户的整数输入
- 加密++验证大文件签名
- C++卡验证问题
- 验证指针链
- 此代码验证公式是什么意思?
- cin 的十进制输入验证?
- 简单的 HTML 验证器
- 密码长度验证 (c++)
- 输入验证以筛选出字符、字符串和一系列整数
- 如何使用 CredUIPromptForWindowsCredentials验证凭据
- 指针验证的最佳实践?
- RSA_PKCS1签名验证
- 验证openssl c++中的签名,这是由JAVA DSA签名的?
- 使用 C++ 验证 NMEA 句子
- 为什么 WinInet 在通过 FQDN 连接时无法通过协商自动进行身份验证,但如果通过 IP 连接则成功?