如何在控制台应用程序中匹配支撑以进行C++
How to match brace in console applications for C++
我正在制作一个 c++ 控制台应用程序,我的问题是与容纳第一对牙套的堆栈相比,我无法让我的大括号匹配并等于 true。插入此算法的方法具有矢量标记参数 我已经编写并重写了几次代码。在下面的帖子中,我放置了一段非常简单的代码来展示我正在尝试做的事情的一些想法:
堆叠熟食店;
for (size_t i=0; i<ie.size(); i++) {
if(ie[i].value =="{"|| ie[i].value =="(" || ie[i].value =="[")
{deli.push(ie[i].value);
if(deli.top() != "}" || deli.top() != ")" || deli.top() != "]"){
return false;
deli.pop();
}
if(deli.top() == "}" || deli.top() != ")" || deli.top() != "]"){
return true;
}
}
}//end of for loop
我认为这是为了作业?
以下是一些提示:
-
通过使用类似 if/else if 语句的内容,将获得左括号的情况与获得右括号的情况分开
-
当你得到一个开放的括号时,你想把它推到堆栈上,应该是这样
-
当您获得右括号时,您希望验证堆栈的顶部以查看是否存在相同类型的关联左括号(如果这与你相关),并通过弹出堆栈来删除该左括号。
-
循环完成后,堆栈应为空,否则出现错误
您可能想要此结构:
for (size_t i=0; i<ie.size(); i++)
{
if (/*conditions for open brackets*/)
{
//Push the bracket on the stack
}
else if (/*conditions for closing brackets*/)
{
//Check the top of the stack if there is an opening bracket
//If so, pop the stack. If not, error.
}
}
代码的逻辑似乎存在一些问题。我不清楚你想做什么。无论如何,我将帮助确定代码中的一些遗漏点。
- 你根据条件尝试做什么
if(deli.top() != "}" || deli.top() != ")" || deli.top() != "]"){
在我看来有些不对劲。"不等于"与"或"
-
你的代码永远不会到达下行。 因为函数在 beofre 行返回。
deli.pop();
-
在这种情况下,您尝试做什么
if(deli.top() == "}" || deli.top() != ")" || deli.top() != "]"){
对我来说看起来有些不对劲 Equl 而不是 Equl 与 or
如果你用语言解释你需要做什么,其他人可以帮助你
您的代码肯定不起作用,因为您没有将一种类型的括号与另一种类型的括号匹配,而是将任何类型的括号与任何其他类型匹配。
解决方案之一是在找到大括号,方括号,括号时计算它们,当它们的计数匹配时。
其他解决方案是更通用的解决方案,与编译器构造有关。如果你已经学习过这个主题,你应该能够编写一个无竞赛的语法并将其转换为确定性有限自动机(DFA),然后编写程序来解析输入。它需要一些深入的研究,但真的很有帮助。
- C++:将控制台输出存储在宏中更好吗
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- C++控制台应用程序阻止退出
- 如何修复此iFile以将.txt输出到控制台
- 为什么控制台要求输入,即使代码中没有输入
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 控制台输出在 Qt5 中未正确显示
- C++出现控制台错误.我无法识别源代码的问题
- C++程序不会从 Windows 控制台运行
- 有人可以向我解释为什么控制台输出 0 吗?
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- Win32 API 控制台光标在 WriteConsole 后不移动
- 如何获取控制台窗口的宽度?
- 如何在 Win32 C++控制台应用程序中调用 UWP 类库
- 如何从Windows控制台调用.exe(C++)以在不同的目录(或任何目录)中创建文件夹?
- 来自Visual Studio中控制台项目的exe文件?
- 为什么即使使用 for 循环遍历我的向量,它也没有输出到控制台?(C++)
- 使用 std::string_view 的子字符串控制台输出