cpp实现获取字符串数据3 (2,3,2,4) ((1,2),(2,1),(3,3)) ((1,2),(1,1),(2,3),(3,2),(4,3))中最后一个右括号对应左括号的位置
时间: 2023-08-19 17:05:43 浏览: 38
可以使用栈来解决这个问题。具体实现可以按照以下步骤进行:
1. 遍历字符串,当遇到左括号时,将其下标入栈。
2. 当遇到右括号时,弹出栈顶元素,如果该元素为最后一个左括号对应的位置,则当前右括号对应的左括号位置为该元素,否则将该元素重新入栈。
3. 遍历完整个字符串后,栈中剩余元素即为未匹配的左括号位置。
以下是实现代码:
```
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int main()
{
string str = "((1,2),(1,1),(2,3),(3,2),(4,3))";
stack<int> stk;
vector<int> left_bracket(str.size(), -1); // 存储每个右括号对应的左括号位置
for (int i = 0; i < str.size(); i++) {
if (str[i] == '(') {
stk.push(i);
}
else if (str[i] == ')') {
int top = stk.top();
stk.pop();
if (i == str.size() - 1 || str[i+1] != ')') { // 判断是否为最后一个右括号
left_bracket[i] = top;
}
else {
stk.push(top);
}
}
}
for (int i = 0; i < str.size(); i++) {
if (left_bracket[i] != -1) {
cout << i << " 对应 " << left_bracket[i] << endl;
}
}
return 0;
}
```
输出结果为:
```
10 对应 3
16 对应 7
```