def braces(m): o = [] p = [] bralist = [] for i in range(len(m)): if m[i] == '(': o.append(-1) p.append(i) print('i',i,m[i]) elif m[i] == ')': o.append(1) p.append(i) print('i',i,m[i]) else: continue t = sum(o) if t == 0: bralist.append([p[0], p[-1]]) o = [] p = [] print('最外层括号:',bralist) return bralist
时间: 2024-02-07 14:02:35 浏览: 29
这个`braces(m)`函数的作用是找出字符串`m`中所有的最外层括号(即没有被其他括号包含的括号),并返回这些最外层括号的起始和结束位置的列表`bralist`。具体实现如下:
1. 定义三个列表`o`、`p`、`bralist`,其中`o`用于记录左右括号的数量差(左括号数量减去右括号数量),`p`用于记录左右括号的位置,`bralist`用于记录所有最外层括号的起始和结束位置。
2. 用`for`循环遍历字符串`m`中的每个字符,如果是左括号`(`,则在`o`中加入-1,在`p`中加入当前字符的位置;如果是右括号`)`,则在`o`中加入1,在`p`中加入当前字符的位置;如果不是括号,则继续循环。
3. 每次加入左右括号后,计算`o`中所有数字的和`t`,如果`t`等于0,则说明当前所有括号已经匹配完毕,将`p`中记录的最外层括号的起始和结束位置加入`bralist`中,并清空`o`和`p`,继续寻找下一组最外层括号。
4. 循环结束后,返回`bralist`,即所有最外层括号的起始和结束位置的列表。
注意:该函数只能找到括号完全匹配的最外层括号,如果存在括号不匹配的情况,可能无法正确识别最外层括号。
相关问题
error: missing braces around initializer [-Werror=missing-braces]
这个错误提示是因为在使用结构体初始化语法时,有的编译器要求必须使用大括号将初始化值括起来,以避免歧义。
例如,下面的代码就会出现这个错误:
```c
struct point {
int x, y;
};
int main() {
struct point p = {1, 2, 3}; // 错误:缺少大括号
return 0;
}
```
正确的初始化方式应该是:
```c
struct point {
int x, y;
};
int main() {
struct point p = {1, 2}; // 正确
return 0;
}
```
如果需要初始化结构体中的某个成员变量中的结构体或联合体类型的变量,也需要使用大括号将其括起来,例如:
```c
struct address {
char street[50];
char city[20];
char state[20];
int zip_code;
};
struct person {
char name[20];
int age;
struct address addr;
};
int main() {
struct person p = {"Tom", 20, {"Main St", "New York", "NY", 10001}}; // 正确
return 0;
}
```
需要注意的是,使用大括号初始化结构体时,必须按照结构体定义的顺序初始化,不能跳过某些成员变量。同时,使用大括号初始化数组时,也需要按照数组定义的顺序初始化。
这个问题是?error: missing braces around initializer [-Werror=missing-braces]
这个错误是由于在初始化结构体或数组时缺少大括号导致的。编译器发出该警告信息以提醒你可能出现的错误,并将其视为错误处理(-Werror=missing-braces)。
在 C 或 C++ 中,当你初始化一个结构体或数组时,应该使用大括号将初始化值括起来。例如:
1. 初始化结构体:
```c
struct Person {
char name[20];
int age;
};
struct Person p = {"John", 25}; // 正确的结构体初始化方式
```
2. 初始化数组:
```c
int numbers[5] = {1, 2, 3, 4, 5}; // 正确的数组初始化方式
```
如果你在初始化结构体或数组时缺少大括号,编译器会发出警告并将其视为错误。为了解决这个问题,你需要确保在初始化结构体或数组时使用正确的语法并加上必要的大括号。
如果你希望取消该警告并将其视为警告而非错误,可以使用编译器选项"-Wno-error=missing-braces"来禁用该错误处理。但是请注意,在禁用该错误处理后,你需要自行确保正确地初始化结构体或数组。