Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2011, 18:36   #1
ilshat09
Пользователь
 
Регистрация: 10.07.2010
Сообщений: 37
По умолчанию работа со строками

Имеется строка символов. В числе прочих в этой строке допускается использование скобок трех типов – (), [] и {}. Скобки разных типов могут быть вложены друг в друга. Необходимо написать функцию, получающую такую строку в качестве параметра. Функция возвращает “True”, если скобки в строке используются корректно – то есть соблюдается правильная последовательность расстановки и сбалансированность. Функция возвращает “False” для всех остальных случаев.
Варианты правильных строк:
• “ab ( cd ) ef”
• “ab [ ( cd ) ] ( [ ef ] ) gh”
• “abcdef”
Варианты неправильных строк:
• “ab ) cd ) ef”
• “ab ( cd { ef ) gh } ij”
помогите решит задачу плиз!!!
ilshat09 вне форума Ответить с цитированием
Старый 24.06.2011, 19:45   #2
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

Всё элементарно. Учимся работать с коллекцией типа стека.
using System.Collections.Generic;

Код:
            // Стек скобок
            Stack<char> brackets = new Stack<char>();
            // Лист открывающих скобок
            List<char> open = new List<char>(new[] { '(', '{', '[' });
            // Лист закрывающих скобок
            List<char> close = new List<char>(new[] { ')', '}', ']' });
            // Строка, которую надо проверить
            string s = "abc(d[e]f{g})";
            // Результат проверки строки
            bool error = false;
            // Проходим циклом по всем символам в строке
            foreach (var ch in s)
                // Если символ принадлежит списку открывающих символов
                if (open.Contains(ch))
                    // Заносим в стек ожидаемый закрывающий символ
                    brackets.Push(close[open.IndexOf(ch)]);
                // Если символ относится к закрывающим
                else if (close.Contains(ch))
                    // Если стек пустой, либо символ на вершине стека не соответствует текущему закрывающему
                    if (brackets.Count == 0 || brackets.Pop() != ch)
                    {
                        // Ошибка в строке
                        error = true;
                        // Выходим из цикла
                        break;
                    }
            // Если в процессе проверки получили ошибку, либо стек не пустой
            if (error || brackets.Count > 0)
                MessageBox.Show("Ошибочка вышла.");
            else
                MessageBox.Show("Всё гуд.");
Spawn™Production® вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
работа со строками Darknes Общие вопросы C/C++ 3 05.07.2010 15:37
c#. Работа со строками alestro07 Помощь студентам 1 23.10.2009 00:34
Работа со строками . Cveto4eg Помощь студентам 11 26.05.2008 13:36