c++ - 确定输入数据是否“平衡”
问题描述
我一直在创建一个程序来检查输入文件(使用文件重定向传入)是否具有所有匹配的括号、方括号和/或大括号。(例如:[][]{}() 是“平衡的”,而 [[}] 是“不平衡的”)。
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
int main() {
stack<char> paren;
string contents;
while(cin >> contents) {
for(auto &i : contents) {
if(contents[i] == '(' || contents[i] == '{' || contents[i] == '[') {
paren.push(contents[i]);
}
if(contents[i] == ')' || contents[i] == '}' || contents[i] == ']') {
if(paren.top() == '(' || paren.top() == '{' || paren.top() == '[') {
paren.pop();
}
}
}
}
if(paren.empty() == true) {
cout << "Balanced" << endl;
}
else {
cout << "Not Balanced" << endl;
}
return 0;
}
我遇到了两个需要帮助的问题:
(1) 当我在字符串上使用 [] 运算符来定位每个单独的字符以进行比较时,终端(我使用 Mac 作为参考)告诉我隐式转换更改。是否有某种类型的转换或其他方式来索引字符串,以便不会出现此错误?或者如果我将数据作为字符读入,我的代码会起作用吗?
(2) 我的程序的逻辑只适用于部分测试用例。我的算法中缺少什么以使其适用于所有类型的输入?
谢谢!!!!!
解决方案
for
(1) 这里的问题是常规循环和增强循环之间的混淆for
。当您编写for(auto &i : contents)
时,访问数据的正确方法很简单if(i == '(' ||
......编写if(contents[i] == '(' ||
尝试将i
声明为 a char&
(从value_type
成员 in推导出std::string
)int
到满足operator[](int)
.std::string
(2) 将文件重定向到在文件读完之前stdin
不会导致进入错误状态。std::cin
推荐阅读
- javascript - 错误:
属性 d:预期数字,“M67,0L67,0LNaN,0LNaN,0L728” - python - 如何从 Superbible Opengl 读取、解析 SBM 文件格式
- apache-spark - 在 HDIinsight 集群上运行 spark 作业时如何解决此致命错误?会话 681 意外地达到了“死亡”的最终状态。查看日志:
- javascript - 如何在矩形中显示我的字符串
- r - 如何在启用 SELinux 的情况下运行 RStudio Server?
- c - 在对共享库进行单元测试时,如何用模拟实现替换函数?
- javascript - 从表列动态创建选项
- ios - 为什么我用代码创建 UIBarButtonItem 时不显示它?
- javascript - 如何在使用哈希路由器的反应应用程序中实现 microsoft oauth
- c# - 将json反序列化为模型