依序走一遍輸入字串
利用 stack 儲存每個 左括號(
的位置
每當遇到一個 右括號)
就消除 stack 中最後出現的 左括號(
若是無法消除,則代表該 右括號)
是無法匹配的
若走完輸入字串後還有剩餘的 左括號(
,則這些左括號都是無法匹配的
#include<iostream>
using namespace std;
char in[1005], ans[1005];
int pos[1005], num, len;
int main()
{
while( cin >> in )
{
//check ')' error
len = strlen(in);
num = 0;
for( int i = 0 ; i < len ; i++ )
{
ans[i] = '-';
if( in[i] == '(' )
{
pos[num] = i;
num++;
}
else if( in[i] == ')' )
{
if( num > 0 )
num--;
else
ans[i] = '^';
}
}
//check '(' error
for( int i = num-1 ; i >=0 ; i-- )
ans[pos[i]] = '^';
ans[len] = '\0';
cout << in << endl << ans << endl;
}
return 0;
}