文章
20
粉丝
224
获赞
56
访问
136.7k
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
int main() {
char s[256];
while (scanf("%s", s) != EOF) {
int len = strlen(s);
stack<char> st;
stack<int> st_index; // 存储栈 st 中的元素对应字符串 s 中的下标
for (int i = 0; i < len; ++i) {
if (s[i] != '(' && s[i] != ')') continue;
else {
if (!st.empty()) {
char now = st.top();
// 进行括号配对判断,配对成功则出栈,否则进栈
if (now == '(' && s[i] == ')') {
st.pop();
st_index.pop();
}
else {
st.push(s[i]);
st_index.push(i);
}
} else {
st.push(s[i]);
st_index.push(i);
}
}
}
cout << s << endl;
// 最后 st 中留下的括号则是没办法进行配对的括号,对应在 s 中的下标则存储在 st_index 中
// 通过将 s 中没办法配对的括号换成对应的 $ 或 ? ,再把其他字符换成空格即可
for (int i = len - 1; i >= 0; --i) {
if (!st_index.empty()) {
if (i == st_index.top()) {
if (s[i] == '(') s[i] = '$';
else s[i] = '?';
...
登录后发布评论
暂无评论,来抢沙发