您的位置:首页 > 其它

26-题目1153:括号匹配问题

2016-03-03 16:56 447 查看

http://ac.jobdu.com/problem.php?pid=1153

#include<iostream>
#include<fstream>
#include<string>
using namespace std;

int main()
{

int i, length = 0;
char arr[101];
ifstream cin("data.txt");
while (cin >> arr)
{
length = strlen(arr);   //获得字符串的长度
//cout << length;
char *flag = new char[length];
int *left = new int[length];
int right, lsum = 0, rsum = 0, j = 0;  //left表示当前的最左括号位置下标,lsum表示左括号出现的次数

for (i = 0; i < length; i++)//开始判断
{
if (arr[i] == '(')
{
left[j++] = i;   //左括号的位置
lsum++;
}
else if (arr[i] == ')')
{
right = i;
rsum++;
if (lsum < rsum)  //右括号不匹配
{
flag[i] = '?';
rsum--;
}
else   // 匹配
{
flag[left[--j]] = ' ';
flag[right] = ' ';
}
}
else
flag[i] = ' ';     //字母
}
for (; j > 0; j--)//左括号不匹配,左括号多了
flag[left[j-1]] = '$';

cout << arr << endl;
for (i = 0; i < length; i++)
cout << flag[i];
cout << endl;
}//end of while
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: