Правильность расстановки скобок - 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);
}
}
}