文章
9
粉丝
126
获赞
11
访问
52.0k
新手,勿喷
这里采用的是结构体的方法
实际上再开辟一个数组直接记录不匹配括号的下标会更简洁(有空再写)
#include <iostream>
using namespace std;
#include <string.h>
#include <stack>
struct node
{
char s;
int num;
};
stack <struct node> st;//创建一个栈,每个元素都是一个结构体,num用来存储字符串下标,以便锁定不匹配括号的位置
char arr[105];//创建数组,方便利用scanf赋值
int main ()
{
while (scanf("%s", arr) != EOF)
{
int len = strlen (arr);
struct node a[105];//创建结构体数组,和数组arr保持统一,方便入栈出栈
for (int j = 0; j < len; j++)//和数组arr保持统一
{
a[j].s = arr[j];
a[j].num = j;
}
for (int i = 0; i < len; i++)//常规操作(括号匹配判断)
{
if (!st.empty() )
{
struct node now = st.top() ;
if (now.s == '(' && arr[i] == ')')
st.pop() ;
else if (arr[i] == '(' || arr[i] == ')')
st.push(a[i]) ;
}
else if (arr[i] == '(' || arr[i] == ')')
st.push(a[i]) ;
}
for (int i = 0; i < len; i++)//由于输出中要有原先的字符串,在这里先输出
{
printf ("%c", arr[i]);
arr[i] = ' ';/...
登录后发布评论
牛的