Правильность расстановки скобок - 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д