Правильность расстановки скобок - C#

Узнай цену своей работы

Формулировка задачи:

Дана строка, содержащая несколько круглых скобок. Если скобки расставлены правильно (то есть каждой открывающей соответствует одна закрывающая), то вывести число 0. В противном случае вывести или номер позиции, в которой расположена первая ошибочная закрывающая скобка, или, если закрывающих скобок не хватает, число –1.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication2
{
    
    class laba2
    {
        class stack
        {
            public char[] data = new char[100];
            public int size;
            void push(char ch, stack st)
            {
                st.size++;
                st.data[st.size] = ch;
            }
 
            bool isEmpty(stack st)
            {
                if (st.size == 0)
                    return true;
                else
 
                    return false;
            }
 
            bool pop(stack st)
            {
                if (!isEmpty(st))
                {
                    st.data[st.size] = ' ';
                    if (st.size > 0)
                        st.size--;
                    else return false;
                    return true;
                }
                else
                    return false;
            }
            public bool compare(char ch)
            {
                if ((ch == '(') || (ch == '[') || (ch == '{'))
                    push(ch, Myst);
                else
                {
 
                    if (ch == ')')
 
                        if (Myst.data[Myst.size] == '(')
                            return pop(Myst);
                        else
                            return false;
 
                    if (ch == ']')
 
                        if (Myst.data[Myst.size] == '[')
                            return pop(Myst);
                        else
                            return false;
 
                    if (ch == '}')
 
                        if (Myst.data[Myst.size] == '{')
                            return pop(Myst);
                        else
                            return false;
                }
                return true;
            }
        }
        
   static stack Myst=new stack();
   long i;
 
        public char tmp;
        public long line, row;
        public bool Flag;

        public void work(String st)
        {
        //Console.WriteLine(ParseBrackets(Console.ReadLine()));
            row= 1;
            line= 11;
            Flag= true;
            
            for (int j = 0; j < st.Length; j++)
            {
                tmp = st[j];
                Flag = Myst.compare(tmp);
                row++;
            }
            if (Flag == false)
            {
                Console.WriteLine("Error: {0}  ", row-1);
            }
            else Console.WriteLine("0");
        }
        
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.Unicode;
            laba2 l2 = new laba2();
            Console.WriteLine("Введите строку со скобками");
            l2.work(Console.ReadLine());
            Console.ReadKey();
        }
    }
}
Главная проблема в том, что код выводит 0 и в верных случаях: 1.
()()
2.
(())
и в неверных: 3.
())(
и даже в случае 4.
())()
и в 5.
())((
а должен писать ошибку во всех случаях, кроме первого и второго (и аналогичных им). Исправьте, плиз. Сдавать через час...
Хелп...

Решение задачи: «Правильность расстановки скобок»

textual
Листинг программы
using System;
 
namespace Brackets
{
    class Class1
    {
 
        static bool CheckBrackets(string str)
        {
            int count = 0;
            foreach (char ch in str)
            {
                if (ch == '(') count++;
                if (ch == ')') count--;
                if (count < 0) return false;
            }
            return count == 0;
        }
        
        static void Main(string[] args)
        {
            string str = "(2*(4-3)(5+6)((2+x)(3-y)+6))";
            Console.WriteLine(CheckBrackets(str)?0:-1);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы