带有栈的c++括号验证器
c++ Bracket Validator with Stacks
我正在尝试编写一个程序,该程序将验证由括号组成的用户输入,以便使用堆栈进行适当的嵌套。我试图在不使用STL容器或递归的情况下做到这一点。我遇到了一些障碍,我正在寻找正确方向上的一点推动。我想我有点接近了,但我觉得我可能过于简化了(我正在自学的过程中)
到目前为止我写的是:
#include <iostream>
#include <string>
#include "ArrayStack.h"
using namespace std;
bool test(char *argg);
int main()
{
string input;
int size = 50;
cout << "enter here: ";
getline(cin, input);
for (int i = 0; i < size; i++)
test(input[i]);
}
bool test(char *argg)
{
ArrayStack S;
char D;
while ( *argg ) {
switch( *argg ) {
case '[': case '{': case '(':
S.push( *argg );
break;
case ']':
if( S.isEmpty() )
return false;
D = S.pop();
if( D!='[' )
return false;
break;
case '}':
if( S.isEmpty() )
return false;
D = S.pop();
if( D!='{' )
return false;
break;
case ')':
if( S.isEmpty() )
return false;
D = S.pop();
if( D!='(' )
return false;
break;
default:
return false;
}// end switch
argg++;
}// end while
return S.isEmpty(); // return true if reach here with empty stack
}
事先感谢您的协助
如果有的话,你把它复杂化了
char inverse(char c){
if(c==']') return '[';
if(c=='}') return '{';
if(c==')') return '(';
return c;
}
int stillvalid(char c, ArrayStack &stack){
if(strchr("[{(", c))
stack.push(c);
else if(strchr("]})", c))
if(stack.isEmpty() || inverse(c) != stack.pop())
return 0;
return 1;
}
int main(){
int c;
ArrayStack stack;
while((c=getchar())!=EOF){
if(!stillvalid((char)c, stack)){
printf("badn");
exit(0);
}
}
printf("goodn");
return 0;
}
用输入myfunc(42);
手工跟踪代码
观察发生了什么,一个字符接一个字符。
相关文章:
- 正在尝试了解输入验证循环
- 如何在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 连接则成功?