Poprawność rozmieszczonych nawiasów

Poprawność rozmieszczonych nawiasów

Napiszemy funkcję sprawdzającą poprawność rozmieszczonych nawiasów w stringu. Będziemy sprawdzać ciąg pod kątem zrównoważonego nawiasu, czyli czy wszystkie nawiasy otwierające mają nawias zamykający i czy są one logicznie umieszczone w ciągu. Takie sprawdzanie może służyć do sprawdzania plików xml, json itp…

Poprawne rozmieszczenie nawiasów

np. ( ) (( )) [] {} <> [<({})>] [[]] (((())))

Niepoprawne rozmieszczenie:

np. )
(
><
())[] ((( )) ( ) ( ) (( )) ( ) ) (

przykładowe rozwiązanie:

Użyjemy Stosu podczas iteracji przez każdy znak ciągu wejściowego, aby odłożyć wszystkie nawiasy otwierające na stos i zdjąć nawias jeśli pasuje. Pod koniec iteracji, jeśli stos jest pusty, wszystkie nawiasy zostały zrównoważone, czyli ciąg jest prawidłowy.

private static bool Solution(string input)
{
   Stack<char> brackets = new Stack<char>();
   Dictionary<char, char> bracketPairs = new Dictionary<char, char>() {   
          { '(', ')' }, 
          { '{', '}' }, 
          { '[', ']' }, 
          { '<', '>' }  
   };

   try
   {               
      foreach (char mark in input) 
      {                  
         if (bracketPairs.Keys.Contains(mark))                   
            brackets.Push(mark);                                       
         else if (bracketPairs.Values.Contains(mark))    
         {                      
            if (mark == bracketPairs[brackets.First()]) 
               brackets.Pop();                      
            else            
               return false;
         }
         else                               
            continue;
      }
   }
   catch
   {         
      return false;
   }
        
   return brackets.Count() == 0 ? true : false;
}

Teraz co tutaj się dzieje:

  • używamy stosu do odkładania i zdejmowania przeglądanych nawiasów
  • korzystamy słownika do zdefiniowania nawiasów jakie będziemy sprawdzać
  • używamy try catch, gdzie wyjątek zostanie przechwycony w przypadku znalezienia nawiasu zamykającego, przed dowolnym nawiasem otwierającym. Co oznacza, że łańcuch nie jest zbalansowany, zwracamy false.
  • w pętli foreach przechodzimy przez każdy znak w ciągu wejściowym
  • następnie w if sprawdzamy, czy znak jest jednym z nawiasów otwierających
  • jeśli tak to odkładamy go na stos
  • jeśli nie sprawdzamy w else if, czy znak jest jednym z nawiasów zamykających
  • następnie sprawdzamy, czy nawias zamykający pasuje do ostatniego nawiasu otwierającego
  • jeśli tak to zdejmujemy go ze stosu
  • jeśli nie, to znaczy ze jest to niezrównoważony string i zwracamy false
  • w przeciwnym razie else, dalej przeglądamy znaki
  • na koniec upewniamy się, że wszystkie nawiasy są zamknięte

I teraz sprawdzamy nasze rozwiązanie.

static void Main(string[] args)
{
   Console.Write("Podaj string: ");
   string expression = Console.ReadLine();
   Console.WriteLine(Solution(expression));
} 

Przykładowe ciągi do sprawdzenia i spodziewane wyniki:

[Ala ma kota {"wszystko dobrze" (12 000), C# (test), Marcin (18), Tomek (44), Web Dev ()}]
[{}()<witaj swiecie>[[{{}}]]]
<test><imie>Tekst</imie)</test>

24 comments

  1. I’ve been exploring for a lіttⅼe for any high-quality articlеs or blog
    posts in this sort of house . Exρloring in Yahoo I at last stumbled upon this site.
    Studying this information So i’m satisfied to show tһat I’ve a very
    excelⅼent uncanny feeling I came upon exaⅽtly what I needed.
    I sucһ a lot certainly will make sure to don?t forget this web site and
    provides it a glance regularly.

  2. It іs truly a great and helpful ⲣiеce of information. I am
    haрpy that you јust shared this helpful information with us.
    Please stay us up to date like this. Thanks
    for sharіng.

  3. Heya i ɑm for the first timе hеre. I came аcross this board and I in finding It
    truly useful & it helped me out a ⅼot. I hope to provide sοmething back and help օthеrs such
    as you helped me.

  4. Niezły post. Na stronach internetowych, na które natrafiam codziennie, uczę się czegoś zupełnie nowego i wymagającego.
    Zawsze ekscytujące jest czytanie treści innych autorów i
    przećwicz coś z ich stron internetowych.

  5. Cieszę się, że znalazłem ten blog. Zawsze dostarcza cennych informacji i inspiracji do dalszego rozwijania umiejętności programistycznych

  6. Хотите получить клиентов используя seo продвижение сайтов это мощный инструмент для повышения видимости вашего веб-сайта в поисковых системах, таких как Google. Это означает больше клиентов, больше продаж и больше прибыли. немкович дизайн студио поможет вам осуществить этот процесс наилучшим образом:

    Качественный Дизайн: Мы создаем привлекательные и функциональные веб-сайты, которые удовлетворяют потребности вашей аудитории.

    Техническая Компетентность: Наши разработчики обеспечивают техническую исправность вашего сайта, что важно как для SEO, так и для пользовательского опыта.

    Оптимизация для Поисковых Систем: Мы проводим SEO-оптимизацию, чтобы ваш сайт был высоко оценен поисковыми системами и мог привлекать больше органического трафика.

    Контент и Маркетинг: Мы создаем качественный контент и разрабатываем маркетинговые стратегии, чтобы привлечь и удержать клиентов.

    Поддержка и Развитие: Мы остаемся на связи и помогаем вам развивать ваш веб-проект в соответствии с изменяющимися потребностями.

    С нами, вы получаете всесторонний подход к вашему онлайн-проекту, который обеспечивает его рост и успех. Начните сотрудничество с Nemkovich Дизайн Студио и добивайтесь лучших результатов в мире веб-дизайна и SEO.

    4J8kazM9

  7. Используйте VPN для получения доступа.
    Если какое то из зеркал не доступно – возможно блокировка идет со стороны провайдера и для ее обхода достаточно включить любой из бесплатных доступных VPN сервисов.
    мега площадка

    b5JjiwV5-3

  8. Воспользуйтесь подбором onion ссылок для входа на Mega Darknet Market
    Специальный сайт который автоматически совершит подбор рабочей онион ссылки – обратившись к скрытому серверу Меги. На выходе даст onion ссылку на Мега даркнет маркет.
    sb mega

    b5JjiwV5-3

Dodaj komentarz