【发布时间】:2021-04-27 15:07:11
【问题描述】:
函数是计算括号的深度,返回最大深度和最早深度的位置。
enter code here
#include<iostream>
#include<string.h>
using namespace std;
int main() {
int n = 0, i =0, count = 0, maxi = 0, index = 0;
string str;
cout << "Enter n";
cin >> n;
cout << "Enter the brackets";
cin >> str;
while (n--) {
for (i = 0; i < n; i++) {
if (str[i] == 1) {
count = 0;
while (str[i] != 2) {
count++;
i++;
}
if (count > maxi) {
maxi = count;
index = i - count;
}
}
}
}
cout << "depth= " << maxi << endl << "starting index=" << index;
return 0;
}
//不确定逻辑出了什么问题..我数了开括号,一旦出现闭括号,计数停止和索引号。并且计数通过。 PS 1 表示开括号,2 表示闭括号。
【问题讨论】:
-
首先,字符串的长度是否总是等于(或更短)
n?其次,您在调试方面做了哪些努力?您是否尝试过使用 调试器 在监控变量及其值的同时逐条执行代码语句? -
字符串将完全等于'n'。我习惯于视觉工作室,所以它会告诉所有警告和错误。它是一个实时编译器。它只是给了我错误的输出
-
像
str[i] == 1这样的比较没有意义。str是字符的字符串。据说是一串“括号”字符而不是数字字符。while (n--)呢?如果n应该是字符串的长度,这有什么意义?整个算法似乎都不对了。 -
是否允许使用不同类型的括号?如果不是,为什么需要数据结构? (只需跟踪当前打开的括号和当前的“最佳匹配”。如果遇到左括号,增加括号计数,如果遇到右括号,更新最佳匹配(如有必要),并减少括号计数。 ..
标签: c++ arrays stack brackets dsa