Правильность расстановки скобок - C#
Формулировка задачи:
Дана строка, содержащая несколько круглых скобок. Если скобки
расставлены правильно (то есть каждой открывающей соответствует
одна закрывающая), то вывести число 0. В противном случае
вывести или номер позиции, в которой расположена первая
ошибочная закрывающая скобка, или, если закрывающих скобок не
хватает, число –1.
Главная проблема в том, что код выводит 0 и в верных случаях:
1.
2.
и в неверных:
3.
и даже в случае
4.
и в
5.
а должен писать ошибку во всех случаях, кроме первого и второго (и аналогичных им). Исправьте, плиз.
Сдавать через час...
Листинг программы
- 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();
- }
- }
- }
Листинг программы
- ()()
Листинг программы
- (())
Листинг программы
- ())(
Листинг программы
- ())()
Листинг программы
- ())((
Хелп...
Решение задачи: «Правильность расстановки скобок»
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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д