Написать программу, которая определяет, является ли скобочное выражение правильным - C#
Формулировка задачи:
Подскажите как написать программу на С++ или С#, которая определяет, является ли скобочное
выражение правильным. Примеры правильных скобочных выражений: (),
(())(), ()(), ((())) и неправильных: )(, ())((), (, )))), ((()). Указание:
рассматриваем последовательно каждый символ заданной строки слева
направо. Если очередной символ – левая скобка, то размещаем ее в стеке,
если правая – то извлекаем элемент из стека (это обязательно должна
быть левая скобка) . После рассмотрения всей строки, если выражение
правильно, стек должен оказаться пустым.
Решение задачи: «Написать программу, которая определяет, является ли скобочное выражение правильным»
textual
Листинг программы
static bool TestParenthesis(string source)
{
Stack<int> stack = new Stack<int>();
foreach (char character in source)
{
int index = "([{)]}".IndexOf(character);
if (index >= 3)
{
if (stack.Count == 0 || stack.Pop() != index) return false;
}
else if (index >= 0) stack.Push(index + 3);
}
return stack.Count == 0;
}
static void Main(string[] args)
{
string goodSource = "{[]}[]()";
Console.WriteLine(TestParenthesis(goodSource));
string basSource = "{[]}[])";
Console.WriteLine(TestParenthesis(basSource));
Console.ReadKey();
}