栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

函数——括号匹配问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

函数——括号匹配问题

描述
   在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算术式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号:首先输出原来字符串,下一行是和原字符串等长的一行,标出不能匹配的括号,其中不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注

    
关于输入
第一行一个正整数n,表示数据的组数。后面n行,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100
关于输出
   对每组输出数据,输出两行,第一行包含原始输入字符,第二行由"$","?"和空格组成,与第一行等长,"$"和"?"表示与之对应的左括号和右括号不能匹配。
   注意:即使所有括号都匹配,第二行也要输出等长的一行空格
例子输入
2

((ABCD(x)

)(rttyy())sss)(
例子输出
((ABCD(x)

$$       

)(rttyy())sss)(

?            ?$

方法:

从左开始遍历,如果遇到左括号1在位置x,则从下一位往后寻找右括号1在位置y,找到后则从右括号1前一位往前寻找左括号2,标记左括号2与右括号1位’ ‘,他们是正确匹配。如果左括号1与2为同一位置的括号,则从下一位置x+1进行下一次寻找;若左括号1与2不同,则从y+1位置开始继续寻找右括号。

若开始遇到的是右括号,情形相似。

最终标记的结果:

        所有匹配的括号——空格;

        所有不是括号的字符——空格;

        不匹配的括号——保留,不做改动。

#include
#include
using namespace std;
void mark(string &s)//记得加&,否则实参不会改变!
{
	int l = s.size();
	for (int i = 0; i < l; ++i) {
		if (s[i] == '(') {
			int flag = 1;
			for (int j = i+1; j < l; ++j) {
				if (s[j] == ')') {
					for (int m = j - 1; m >= i; --m) {
						if(s[m]=='('){
							s[m] = ' ';
							s[j] = ' ';
							if (m == i) { flag = 0; }
							break;
						}
					}
				}
				if (flag == 0) { break; }
			}
		}
		else if (s[i] == ')') {
			int flag = 1;
			for (int j = i - 1; j >= 0; --j) {
				if (s[j] == '(') {
					for (int m = j + 1; m <= i; ++m) {
						if (s[m] == ')') {
							s[m] = ' ';
							s[j] = ' ';
							if (m == i) { flag = 0; }
							break;
						}
					}
				}
				if (flag == 0) { break; }
			}
		}
		else s[i] = ' ';
	}
}

int main()
{
	int N;
	cin >> N;
	while (N--) {
		string str;
		cin >> str;
		int len = str.size();
		cout << str << endl;
		mark(str);
		for (int i = 0; i < len; ++i) {
			if (str[i] == '(') { cout << "$"; }
			else if (str[i] == ')') { cout << "?"; }
			else cout << " ";
		}
		cout << endl;
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/629389.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号