精华内容
下载资源
问答
  • C++括号匹配-栈
    2021-09-13 11:19:06

    题目大意:输入不超过100个字符的字符串,其中包含数字、字母、空格、标点符号和()、[]、{}。检查字符串中的括号是否匹配。

    输入格式:一行字符串

    输出格式:匹配 yes 不匹配 no

    遇到这个问题, 想到当遇到右括号时, 向左进行匹配, 如果左侧第一个括号与这个右括号匹配成功, 就要消去这两个括号, 所以使用栈,判断栈顶元素与当前元素的匹配情况

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	string c;      //输入字符串
    	stack<char> st;  //栈
    	int flag = 1;   //yes或no的判定
    	while(cin>>c){
    		for(int i = 0; i < c.size(); i++){
    			if(c[i] == '(' ||c[i] == '{' ||c[i] == '['){  //左括号压栈
    				st.push(c[i]);
    			}
    			else if(c[i] == '}'){   //右括号向栈顶匹配
    				if(st.empty()){   //空栈 no
    					flag = 0;
    					break;
    				}
    				else if(st.top() == '{'){   //匹配 则继续将栈顶元素出栈并继续判断
    					flag = 1;
    					st.pop();
    				}
    				else{  //其余情况  no
    					flag = 0;
    					break;
    				}	
    				
    			}
    			else if(c[i] == ']'){
    				if(st.empty()){
    					flag = 0;
    					break;
    				}
    				else if(st.top() == '['){
    					flag = 1;
    					st.pop();
    				}
    				else{
    					flag = 0;
    					break;
    				}
    			}
    			else if(c[i] == ')'){
    				if(st.empty()){
    					flag = 0;
    					break;
    				}
    				else if(st.top() == '('){
    					flag = 1;
    					st.pop();
    				}
    				else{
    					flag = 0;
    					break;
    				}
    			}
    		}
    		if(flag){
    			cout<<"yes"<<endl;
    		}
    		else{
    			cout<<"no"<<endl;
    		}
    	}
    
    	return 0;
    } 

    更多相关内容
  • c++括号匹配

    2014-12-05 15:26:05
    c++括号匹配
  • c++ 括号匹配

    2019-07-12 17:37:28
    括号匹配是栈最经典的应用之一 运用的栈函数 1.push(): 向栈内压入一个成员; 2.pop(): 从栈顶弹出一个成员; 3…top(): 返回栈顶,但不删除成员; 思路: 1.定义一个标记量flag=1,求一下输入字符串的长度...

    括号匹配是栈最经典的应用之一

    运用的栈函数
    1.push(): 向栈内压入一个成员;
    2.pop(): 从栈顶弹出一个成员;
    3…top(): 返回栈顶,但不删除成员;

    思路:
    1.定义一个标记量flag=1,求一下输入字符串的长度。
    2从第一个字符串开始遍历。
    3.首先判断是否为‘{’,‘(’和‘[’,如果是 直接入栈。
    4.如果不是的话,则会是‘}’,‘)’,‘]’,这三种情况,这三种情况类似,以‘}’举例,判断此时栈顶元素是否与相对应的‘{’相等,
    如果不相等,flag=0,直接输遍历;如果相等,让此时栈顶元素出栈。
    5.判断标记量即可。
    代码如下:

    #include<iostream>
    #include<string.h>
    #include<stack>
    using namespace std;
    int main()
    {
    	char a[101];
    	int i,l;
    	stack<char> s; 
    	while(cin>>a)
    	{
    		int flag=1;
    		l=strlen(a);
    		for(i=0;i<l;i++)
    		{
    			if(a[i]=='('||a[i]=='['||a[i]=='{')
    			s.push(a[i]);
    		    else if(a[i]==')')
    		    {
    		    	if(s.top() != '(' )
    		    	{
    		    		flag=0;
    		    		break;
    				}
    				else
    				   s.pop();
    			}
    			else if(a[i]==']')
    		    {
    		    	if(s.top() != '[' )
    		    	{
    		    		flag=0;
    		    		break;
    				}
    				else
    				   s.pop();
    			}
    			else if(a[i]=='}')
    		    {
    		    	if(s.top() != '{' )
    		    	{
    		    		flag=0;
    		    		break;
    				}
    				else
    				   s.pop();
    			}
    		}
    		if(flag==1)
    		cout<<"Yes"<<endl;
    		else
    		cout<<"No"<<endl;
    	} 
    	return 0;
    }
    

    测试情况如下图:

    展开全文
  • C++括号匹配问题

    千次阅读 2020-05-27 12:26:35
    4.遍历结束后判断栈是否为空:若为空则匹配,不为空不匹配 bool isMatch(string str) { //1.建立一个栈 Stack<char> s; //2.遍历字符串 for(int i=0;i<str.length();i++) { //2.1如果当前

    第一种算法

    用栈来解决:
    1.建立一个栈
    2.遍历字符串如果是左括号就压栈
    3.如果是有括号:判断此时栈是否为空
    3.1如果为空则不匹配
    3.2如果不为空则弹出一个元素
    4.遍历结束后判断栈是否为空:若为空则匹配,不为空不匹配

    bool isMatch(string str)
    {
        //1.建立一个栈
        Stack<char> s;
        //2.遍历字符串
        for(int i=0;i<str.length();i++)
        {
            //2.1如果当前字符为左括号:将左括号压栈
            if(str[i]=='(')
            {
                s.push(str[i]);
            }
            //2.2如果当前字符为右括号:
            if(str[i]==')')
            {
                //2.2.1如果为空则返回括号不匹配
                if(s.isEmpty()) return false;
                //2.2.2如果栈不为空,从栈中弹出一个左括号.
                else{
                    s.pop();
                }
            }
    
        }
    
        //3.遍历结束后如果栈中为空则返回括号匹配,如果不为空则不匹配
        if(s.isEmpty()) return true;
        else return false;
    }
    

    第二种算法

    1.设置一个整数sum初始化为0
    2.遍历字符串:如果为左括号则sum++;如果为右括号则sum–
    3.遍历结束后如果sum为0则匹配,不为0不匹配

    bool ismatch(string str)
    {
        int sum=0;
        for(int i=0;i<str.length();i++)
        {
            if(str[i]=='(') sum++;
            if(str[i]==')') sum--;
        }
        if(sum==0) return true;
        else return false;
    }
    
    展开全文
  • c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题c++括号匹配问题
  • c++使用堆栈实现括号匹配问题
  • C++括号匹配的检验

    千次阅读 2018-12-11 19:37:57
    假设表达式中包含三种括号,其嵌套顺序任意,即[]({[]})、([({})])为正确格式,{{[])、}()[]为不正确的格式,检查括号是否匹配,基于C++实现,使用STL实现的stack进行实现; #include &lt;iostream&gt; #...

    假设表达式中包含三种括号,其嵌套顺序任意,即[]({[]})、([({})])为正确格式,{{[])、}()[]为不正确的格式,检查括号是否匹配,基于C++实现,使用STL实现的stack进行实现;

    #include <iostream>
    #include <vector>
    #include <stack>
    #include <string>
    
    void matchBrackets(const std::string &brackets);
    
    int main(){
    
    	std::string a = "[][]][[]][]";
    	std::string b = "(){}{}[]({[]})";
    	std::string c = "[][][][][][";
    	std::string d = "[](){}[]()()(([])([]))";
    
    	matchBrackets(a);
    	matchBrackets(b);
    	matchBrackets(c);
    	matchBrackets(d);
    
    	getchar();
    	return 0;
    
    }
    
    void matchBrackets(const std::string &brackets){
    	std::stack<char, std::vector<char> > bracket_stack;
    	if (brackets.length() > 0){
    		int index = 0;
    		if (brackets[index] == '(' || brackets[index] == '[' || brackets[index] == '{')
    			bracket_stack.push(brackets[index++]);
    		while (index < brackets.length()){
    			if (brackets[index] == '(' || brackets[index] == '[' || brackets[index] == '{')
    				bracket_stack.push(brackets[index]);
    			else{
    				if (bracket_stack.size() == 0) break;
    				switch (bracket_stack.top()){
    				case '(':
    					if (brackets[index] == ')')	bracket_stack.pop();
    					break;
    				case '[':
    					if (brackets[index] == ']')	bracket_stack.pop();
    					break;
    				case '{':
    					if (brackets[index] == '}')	bracket_stack.pop();
    					break;
    				default:
    					break;
    				}
    			}
    			index++;
    		}
    
    		if (index >= brackets.size() && bracket_stack.empty())
    			std::cout << "brackets matched!" << std::endl;
    		else
    			std::cout << "brackets unmatched!" << std::endl;
    	}
    }
    

     

    展开全文
  • 括号匹配C++

    2015-12-05 00:41:15
    括号匹配:判断一段字符串括号是否匹配,就是左括号是否与右括号搭配,且括号类型要相同,且有空字符串,括号套括号等特殊情况。
  • C++括号匹配代码实现

    千次阅读 2019-02-20 22:17:58
    #include &lt;iostream&gt; #include &lt;cstring&gt; ...//判断括号是否匹配 bool isMatch(string s) { stack&lt;char&gt; st; int len = s.size(); for (int i = ...
  • 括号匹配的检验

    2019-03-24 17:32:03
    假设一个算术表达式中可以包含三种括号:园括号“(”和“)”、方括号“[”和“]”、花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用。编写判别给定表达式中所含括号是否正确配对出现的算法(已知表达式已...
  • C++实现括号匹配

    千次阅读 2019-08-12 10:04:59
    位置0和位置10的右括号匹配,位置3的左括号和位置7的有括号匹配。 2.求解策略 如果从左至右地扫描一个字符串,那么每一个右括号都与最近扫描的那个未匹配的左括号相匹配。从左到右地扫描过程中,将扫描到的左括号...
  • 括号匹配c++

    2021-10-05 16:34:14
    20. 有效的括号(力扣) 给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例 1: ...
  • c++括号匹配

    千次阅读 2019-01-05 15:02:41
    c++括号匹配 题目描述 假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“}”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。...
  • C++ 栈的括号匹配

    2022-02-17 11:13:53
    总结归纳 算法思想: 设置一个空栈,顺序读取括号。读取左括号时,将括号入栈;...栈的括号匹配 */ #include <iostream> #define MaxSize 10 // 栈中元素的最大个数 using namespace std
  • c++括号匹配问题

    2020-04-13 17:44:42
    输出所输入内容中的括号对的对数,并且输出相应括号对的序号。 输出内容应该如下: 3 0 2 5 10 7 8 此题要从栈入手! #include <iostream> #include <vector> #include <stack> #include<...
  • 表达式括号匹配C++

    2021-08-13 18:47:58
    请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YESYES”;否则返回“NONO”。表达式长度小于255255,左圆括号少于2020个。 【输入】 一行数据,即表达式。 【输出】 一行,即“YESYES”...
  • 其实这个代码我一好几天前就开始写了,一开始用c写,但是发现用c写一个正解应该用栈解决的c++问题对于一个焫鷄来讲就好比刚学会汉语拼音然后让你写英语作文的感觉,唉,今天就转手用c++来写。 栈还没大学明白,只...
  • C++括号匹配算法实现

    2010-09-15 19:29:48
    C++实现,识别依次读入的一个以@`为结束符的算术表达式中可以包含三种符号; 圆括号"("和")"、方括号"["和"]"和花括号"{"和"}",且这三种括号可按任意的次序嵌套 使用如:…[…{…}…[…]…]…[…]…(…)…)。判别...
  • 括号匹配-c++

    2021-07-13 20:46:58
    括号匹配 请编写程序判断一个包含“(”和“)”的括号序列是否匹配。如匹配则输出Match;如不匹配,计算出使该序列变为匹配序列所需添加的最少括号数目(只允许在该序列开始和结尾处添加括号),并输出经添加最少...
  • 输入一串括号字符串,从左往右扫描,若遇到左括号则入栈,若遇到右括号则从栈顶出栈一个括号(肯定是左括号),然后与其匹配。 代码实现 #include<iostream> #include<string> using namespace std; const ...
  • C++——括号匹配算法

    千次阅读 2019-03-30 21:01:35
    括号匹配算法 利用栈的LIFO的特点,我们可以进行左右括号的匹配,“()【】{}” 在右括号“)】}”左边最近的左括号必须是相对应的“(【{”,否则就不合法 每次匹配一对正确的括号,就要将其出栈,为外层的括号...
  • win32控制台应用程序 vs2010以上编译通过 输入含(){}[]的表达式 判断括号是否正确匹配 大连理工大学软件学院数据结构上机题
  • C++ 括号匹配的检验

    千次阅读 2018-04-26 16:32:14
    #include&lt;iostream&gt;#include&lt;string&gt;#include&lt;stack&gt;using namespace std;stack&lt;char&gt; s;int main(){ bool state=true; string exp;......
  • C++实现一个简单的括号匹配

    千次阅读 2021-04-25 11:24:33
    如下所示,这是一个简单的括号匹配: #include<iostream> #include<cstring> using namespace std; class stack { private: int maxsize; char * st; public: int top; stack(int size) { ...
  • C++ 括号匹配

    千次阅读 2016-04-07 14:32:29
    主要是利用栈进行入栈出栈匹配,代码如下: #include #include using namespace std; #define STACK_SIZE 100 struct Stack { char strStack[STACK_SIZE]; int top; }; void InitStack(Stack &s) { s...
  • C++ 括号匹配 栈实现

    2020-03-04 11:38:04
    3.若为又括号“),],}”,则与栈顶元素进行匹配: ①:若匹配,则弹出栈顶元素; ②:若不匹配,则该序列不合法. 4.若遍历结束,栈空则合法,否则不合法. 操作函数 void InitStack(sqStack &s);//初始化栈 void ...
  • 合法的括号序列称为匹配序列,不合法的括号序列称为不匹配序列。匹配序列示例:([()]) [] ()[()] ,不匹配序列示例:([()] ] (][()],那么如何判断一个括号序列是否为匹配序列呢?请用栈的结构来进行验证。 分析 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,739
精华内容 22,295
关键字:

c++括号匹配

c++ 订阅