Napisać metodę bool CheckBrackets(string expression), która sprawdzi czy podane wyrażenie z nawiasami okrągłymi i kwadratowymi jest poprawne. Do rozwiązania wykorzystać stos.
Przykłady poprawnych wyrażeń: ([(([]))]), () , [] , ()()()[()]
Przykłady niepoprawnych wyrażeń: ([(([])]), (], (, ([(([][))
Napisałem coś takiego i dla poprawne zwraca false
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ZLabStos
{
class Program
{
public static bool CheckBrackets(string expression)
{
bool good = false;
Stack<char> stack = new Stack<char>();
for (int i = 0; i < expression.Length; i++ )
{
stack.Push(expression[i]); //umieszczamy elementy w stosie
}
Console.Write("Stos: ");
foreach(char el in stack){
Console.Write(el + " ");
}
var stackCopy = new Stack<char>(stack.ToArray());
Console.WriteLine();
Console.Write("\nKopia stosu: ");
foreach(char el in stackCopy)
{
Console.Write(el + " ");
}
for (int i = 0; i < stack.Count; i++)
{
if (stack.Pop().Equals(stackCopy.Pop()))
{
good = true;
}
else
{
good = false;
}
}
return good;
}
static void Main(string[] args)
{
//Przykłady poprawnych wyrażeń: ([(([]))]), () , [] , ()()()[()]
//Przykłady niepoprawnych wyrażeń: ([(([])]), (], (, ([(([][))
//Poprawne zwraca true
String p1 = "([(([]))])";
String p2 = "()";
String p3 = "[]";
String p4 = "()()()[()]";
//Niepoprawne zwraca false
String n1 = "([(([])])";
String n2 = "(]";
String n3 = "(";
String n4 = "([(([][))";
String expression = "";
//Console.WriteLine("Podaj wyrażenie: ");
//expression = Console.ReadLine();
expression = p1;
Console.WriteLine("\n" + CheckBrackets(expression));
Console.ReadKey();
}
}
}
Dla testu wpisuję sobie cyfry np. 123 i za każdym razem jest: true, a gdy wpiszę np 1234 to za każdym razem jest false. Widać na screenach w załączniku. Nie rozumiem dlaczego raz działa, a raz nie.