集美大学数据结构吧 关注:74贴子:269
  • 19回复贴,共1

OJ讨论-栈和队列-括号匹配

只看楼主收藏回复

有关栈和队列的讨论都在该贴进行
http://jmunetds.openjudge.cn/ex2/0301/
输入一串括号
如果输入的右括号多余,输出:Extra right brackets
如果输入的左括号多余, 输出:Extra left brackets
如果输入的括号不匹配,输出:Brackets not match
如果输入的括号匹配,输出:Brackets match
输入
{{{{)))
输出
Brackets not match
样例输入
{([)]}
样例输出
Brackets not match


IP属地:福建1楼2015-10-09 21:49回复
    老师,不太理解题目的意思,什么情况下输出左括号多余,什么时候右括号多余。给的例子输入{{{{)))为什么不算左括号多余呢??还是题目怎么理解?


    2楼2015-10-09 21:52
    收起回复
      # include <iostream>
      # include <stack>
      # include <string>
      using namespace std;
      void main()
      {
      int flag;
      char ch;
      int x;
      stack <char> s1;
      flag=1;
      cin>>ch;
      while(ch!='\0' && flag)
      {
      switch(ch)
      {
      case '{'||'['||'(':
      s1.push(ch);
      break;
      case '}':
      if(!s1.empty() && s1.top()=='{')
      s1.pop();
      else flag=0;
      break;
      case ']':
      if(!s1.empty() &&s1.top()=='[')
      s1.pop();
      else flag=0;
      break;
      case ')':
      if(!s1.empty() && s1.top()=='(')
      s1.pop();
      else flag=0;
      break;
      }
      cin>>ch;
      }
      if(s1.empty() && flag)
      printf("Brackets match");
      else if(s1.top()== '{' || '(' || '[')
      printf("Extra left brackets");
      else if(s1.top()== '}' || ')' || ']')
      printf("Extra right brackets");
      else
      printf("Brackets not match");
      }


      IP属地:陕西4楼2015-10-11 14:16
      收起回复
        建议用string
        string str;
        cin>>str;
        然后对str字符串处理,这时候str可当做数组处理


        IP属地:福建来自Android客户端5楼2015-10-11 15:29
        收起回复


          IP属地:陕西6楼2015-10-11 19:11
          回复
            # include <iostream>
            # include <stack>
            # include <string>
            using namespace std;
            void main()
            {
            int flag,i=0;
            string str;
            cin>>str;
            char x;
            stack <char> s1;
            flag=1;
            while(i<str.length() && flag)
            {
            switch(str[i])
            {
            case '{'||'['||'(':
            s1.push(x);
            break;
            case '}':
            if(!s1.empty() && s1.top()=='{')
            s1.pop();
            else flag=0;
            break;
            case ']':
            if(!s1.empty() &&s1.top()=='[')
            s1.pop();
            else flag=0;
            break;
            case ')':
            if(!s1.empty() && s1.top()=='(')
            s1.pop();
            else flag=0;
            break;
            }
            i++;
            }
            if(s1.empty() && flag)
            printf("Brackets match");
            else if(s1.top()== '{' || '(' || '[')
            printf("Extra left brackets");
            else if(s1.top()== '}' || ')' || ']')
            printf("Extra right brackets");
            else
            printf("Brackets not match");
            }


            IP属地:陕西7楼2015-10-11 19:11
            收起回复