#include <stack> //引入了C++标准模板库的stack #include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; void Match() { char test[100]; //定义了一个char类型的test数组装“{{([])}}”这样的字符串,用以测试 cin >> test; //输入字符串 stack<char>S; //定义一个栈,类型是char类型 bool ismatch = true; //定义一个bool类型的变量,先赋值为true,如果在循环体中发现是不匹配的,就把值变成false for (int i = 0; test[i] != '\0'; i++) { //for循环对数组每个元素都进行测试,如果是'[','{','('就放入栈 //如果是']','}',')',就取出栈顶元素,与当前元素进行匹配,一旦发现不匹配,ismatch就变成 //false switch (test[i]) { case '[': case '{': case '(': { S.push(test[i]); break; } case ']': { char temp = S.top(); S.pop(); //取栈顶元素,并弹栈 if (temp != '[') { ismatch = false; } break; } case '}': { char temp = S.top(); S.pop(); //取栈顶元素,并弹栈 if (temp != '{') { ismatch = false; } break; } case ')': { char temp = S.top(); S.pop(); //取栈顶元素,并弹栈 if (temp != '(') { ismatch = false; } break; } default: break; } if (ismatch == false) { //如果ismatch是false,就终止循环,并且打印不匹配 printf("\n%s括号不匹配\n", test); break; } } if (ismatch == true) { printf("\n%s括号是匹配的\n", test); } } int main() { //测试数据:{([({{([[[{{}}]]])}})])} Match(); }
第一次写文章