【发布时间】:2021-05-20 22:57:50
【问题描述】:
我一直在创建一个程序来检查输入文件(使用文件重定向传入)是否具有所有匹配的括号、方括号和/或大括号。 (例如:[][]{}() 是“平衡的”,而 [[}] 是“不平衡的”)。
#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(auto &i : contents)-- 问问自己:i是什么类型的变量?它是一个索引,即0、1、2等?在该循环中打印出i的值,这将为您提供有关问题的提示。 -
有时
auto是魔鬼。 -
[(])平衡吗? -
}{平衡吗?这会影响@PaulSanders 的回答。 -
我不知道它是否平衡,但
}{看起来确实像 Pink Floyd 专辑封面。
标签: c++ macos terminal file-io