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

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

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

Дана строка, содержащая несколько круглых скобок. Если скобки расставлены правильно (то есть каждой открывающей соответствует одна закрывающая), то вывести число 0. В противном случае вывести или номер позиции, в которой расположена первая ошибочная закрывающая скобка, или, если закрывающих скобок не хватает, число –1.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ConsoleApplication2
  7. {
  8. class laba2
  9. {
  10. class stack
  11. {
  12. public char[] data = new char[100];
  13. public int size;
  14. void push(char ch, stack st)
  15. {
  16. st.size++;
  17. st.data[st.size] = ch;
  18. }
  19. bool isEmpty(stack st)
  20. {
  21. if (st.size == 0)
  22. return true;
  23. else
  24. return false;
  25. }
  26. bool pop(stack st)
  27. {
  28. if (!isEmpty(st))
  29. {
  30. st.data[st.size] = ' ';
  31. if (st.size > 0)
  32. st.size--;
  33. else return false;
  34. return true;
  35. }
  36. else
  37. return false;
  38. }
  39. public bool compare(char ch)
  40. {
  41. if ((ch == '(') || (ch == '[') || (ch == '{'))
  42. push(ch, Myst);
  43. else
  44. {
  45. if (ch == ')')
  46. if (Myst.data[Myst.size] == '(')
  47. return pop(Myst);
  48. else
  49. return false;
  50. if (ch == ']')
  51. if (Myst.data[Myst.size] == '[')
  52. return pop(Myst);
  53. else
  54. return false;
  55. if (ch == '}')
  56. if (Myst.data[Myst.size] == '{')
  57. return pop(Myst);
  58. else
  59. return false;
  60. }
  61. return true;
  62. }
  63. }
  64. static stack Myst=new stack();
  65. long i;
  66. public char tmp;
  67. public long line, row;
  68. public bool Flag;
  69.  
  70. public void work(String st)
  71. {
  72. //Console.WriteLine(ParseBrackets(Console.ReadLine()));
  73. row= 1;
  74. line= 11;
  75. Flag= true;
  76. for (int j = 0; j < st.Length; j++)
  77. {
  78. tmp = st[j];
  79. Flag = Myst.compare(tmp);
  80. row++;
  81. }
  82. if (Flag == false)
  83. {
  84. Console.WriteLine("Error: {0} ", row-1);
  85. }
  86. else Console.WriteLine("0");
  87. }
  88. }
  89. class Program
  90. {
  91. static void Main(string[] args)
  92. {
  93. Console.OutputEncoding = Encoding.Unicode;
  94. laba2 l2 = new laba2();
  95. Console.WriteLine("Введите строку со скобками");
  96. l2.work(Console.ReadLine());
  97. Console.ReadKey();
  98. }
  99. }
  100. }
Главная проблема в том, что код выводит 0 и в верных случаях: 1.
Листинг программы
  1. ()()
2.
Листинг программы
  1. (())
и в неверных: 3.
Листинг программы
  1. ())(
и даже в случае 4.
Листинг программы
  1. ())()
и в 5.
Листинг программы
  1. ())((
а должен писать ошибку во всех случаях, кроме первого и второго (и аналогичных им). Исправьте, плиз. Сдавать через час...
Хелп...

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

textual
Листинг программы
  1. using System;
  2.  
  3. namespace Brackets
  4. {
  5.     class Class1
  6.     {
  7.  
  8.         static bool CheckBrackets(string str)
  9.         {
  10.             int count = 0;
  11.             foreach (char ch in str)
  12.             {
  13.                 if (ch == '(') count++;
  14.                 if (ch == ')') count--;
  15.                 if (count < 0) return false;
  16.             }
  17.             return count == 0;
  18.         }
  19.        
  20.         static void Main(string[] args)
  21.         {
  22.             string str = "(2*(4-3)(5+6)((2+x)(3-y)+6))";
  23.             Console.WriteLine(CheckBrackets(str)?0:-1);
  24.         }
  25.     }
  26. }

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


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

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

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы