C++设计一个算法,判断一个可能含有花括号、中括号、和圆括号的表达式中各类括号是否匹配,若匹配,则返回1;否则返回0。其中表达式只包含三种括号,花括号0:中括号D]、圆括号0,即它仅由(、)、[、]、(、)六个字符组成。输入说明:
输入一串只包含上述括号的字符串(中间用空格隔开)。
输出说明:
输出该字符串,并判断是不是匹配的表达式。
输入样例1:{}
输出样例1:{)是匹配的表达式
输入样例2:[({}][)]
输出样例2:[({}][)]不是匹配的表达式
关于#c++#的问题:输入样例1:{}输出样例1:{)是匹配的表达式输入样例2:[({}][)]输出样例2:[({}][)]不是匹配的表达式(相关搜索:字符串|空格隔开)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
解答: 算法设计: 利用栈来实现判断括号是否匹配的算法。 遍历字符串中的每个字符: 如果当前字符为左括号(花括号、中括号或圆括号),则将其压入栈中; 如果当前字符为右括号,则从栈中弹出一个字符,判断两者是否匹配,如果不匹配,则返回0;如果匹配,则继续遍历字符串。 如果遍历完字符串后,栈为空,则返回1,表示括号匹配,否则返回0。 代码实现:#include <iostream> #include <stack> #include <string> using namespace std; bool isMatch(char left, char right) { return (left == '(' && right == ')') || (left == '[' && right == ']') || (left == '{' && right == '}'); } int main() { string str; getline(cin, str); stack<char> s; for (int i = 0; i < str.length(); i++) { if (str[i] == '(' || str[i] == '[' || str[i] == '{') { s.push(str[i]); } else if (str[i] == ')' || str[i] == ']' || str[i] == '}') { if (s.empty()) { cout << str << "不是匹配的表达式" << endl; return 0; } char left = s.top(); s.pop(); if (!isMatch(left, str[i])) { cout << str << "不是匹配的表达式" << endl; return 0; } } } if (s.empty()) { cout << str << "是匹配的表达式" << endl; } else { cout << str << "不是匹配的表达式" << endl; } return 0; }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报