Coursera pku C程序进阶 编程题#4:扩号匹配问题
2017-09-21 17:37
661 查看
题目描述
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用”$”标注,不能匹配的右括号用”?”标注.
输入
输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100
注意:cin.getline(str,100)最多只能输入99个字符!
输出
对每组输出数据,!!!输出两行,第一行包含原始输入字符!!!,第二行由”","?"和空格组成,"”和”?”表示与之对应的左括号和右括号不能匹配。
代码的思想是这样的:
使用递归帮左括号,找到右括号,把已经配对完成的括号赋值为空格(“ ”)。然后把所有剩下的没有配对的右括号幅值“?”(没有配对的左括号在配对过程中就已经幅值“$”了)。而配对的过程主要是有循环和遍历组成的。
代码如下:
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用”$”标注,不能匹配的右括号用”?”标注.
输入
输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100
注意:cin.getline(str,100)最多只能输入99个字符!
输出
对每组输出数据,!!!输出两行,第一行包含原始输入字符!!!,第二行由”","?"和空格组成,"”和”?”表示与之对应的左括号和右括号不能匹配。
代码的思想是这样的:
使用递归帮左括号,找到右括号,把已经配对完成的括号赋值为空格(“ ”)。然后把所有剩下的没有配对的右括号幅值“?”(没有配对的左括号在配对过程中就已经幅值“$”了)。而配对的过程主要是有循环和遍历组成的。
代码如下:
#include<iostream> using namespace std; char c[200]; int match(int pos); int main(){ while (cin.getline(c, 101)){//输入多组数据的标准写法 int l = strlen(c); for (int i = 0; i < l; i++){ cout << c[i]; if (c[i] != '('&&c[i] != ')'){ c[i] = ' '; } } cout << endl; //遍历以寻找匹配括号 for (int i = 0; i < l; i++){ if (c[i] == '('){ int pos = i; match(pos); } } //把剩下的没匹配的括号标识 for (int i = 0; i < l; i++){ if (c[i] == ')'){ c[i] = '?'; } cout << c[i]; } cout << endl; } } int match(int pos){ int r = pos + 1; while (1){ if (c[r] == ')'){ c[pos] = ' '; c[r] = ' '; return r; } else if (c[r] == '('){ match(r); } else if (c[r] == 0){ c[pos] = '$'; return r; } else{ r++; } } }
相关文章推荐
- 编程题#4:扩号匹配问题
- 程序设计进阶 编程题#4:Tomrrow never knows?
- Coursera-C程序设计进阶-编程题#4:Tomorrow never knows?
- C++基本要点复习--------coursera程序设计实习(PKU)的lecture notes
- coursera C程序进阶 第二周 #6
- pku2195二分图的最佳匹配问题mub
- 程序设计进阶 编程题#6:流感传染
- poj/pku 1904(强连通分量解决匹配问题)
- [土狗之路]coursera上C语言进阶习题 括号匹配
- Java程序语言进阶 ---- 第一周编程题
- POJ C程序设计进阶 编程题#4:寻找平面上的极大点
- 数据结构(8)--栈的应用之行编辑程序、括号匹配检验、数制转换、hanio塔问题
- 问题描述:客户端连接数据库报错,ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄
- pku 2195 Going Home KM最小权匹配问题
- hdu 1080 pku1080 基因序列匹配问题
- opencv ORB特征检测+FLANN匹配程序报错问题
- 程序运行msvcr80.dll不匹配问题
- 枚举 编程题#1: 画家问题(Coursera 程序设计与算法 专项课程4;枚举方法:用二进制依次加1的进位方法模拟实现)
- ? 枚举 编程题#2:拨钟问题(Coursera 程序设计与算法 专项课程4;函数memcpy的用法,switch case break 语句!)
- [编程题]括号匹配问题