0 / 0 / 0
Регистрация: 30.03.2019
Сообщений: 17

Проверить на правильность расстановки скобок

11.04.2019, 21:20. Показов 9168. Ответов 11

Студворк — интернет-сервис помощи студентам
Дана строка. Проверить правильность расстановки скобок в строке (для каждой открывающей есть закрывающая). У каждой открывающей скобки есть парная закрывающая, и ни одна закрывающая не предшествует открывающей. Если скобки расставлены неверно, то исправить. В С# Помогите плииииз!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.04.2019, 21:20
Ответы с готовыми решениями:

Проверить правильность расстановки в строке скобок (баланс открывающих и закрывающих скобок)
помогите с решением задачи. Запросить у пользователя ввод значений согласно варианту. Выполнить задание согласно варианту. После...

Проверить правильность расстановки круглых скобок в выражении
Дана последовательность символов длины n (n>=1) Написать метод, который проверяет круглых скобок в этом выражении. Например, при вводе...

Правильность расстановки скобок
Дана строка, содержащая несколько круглых скобок. Если скобки расставлены правильно (то есть каждой открывающей соответствует одна...

11
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
11.04.2019, 22:50
Utopky, Ну ок, давайте разберемся, проверим. Кидайте код. Что проверять-то)
0
119 / 84 / 42
Регистрация: 14.12.2015
Сообщений: 945
11.04.2019, 22:53
ShmelVG, ты не понял. Ты код сначада должен написать)
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
11.04.2019, 23:04
Utopky, Talamaur, Решено:
C#
1
2
3
4
5
6
7
class Program
    {
        static void Main()
        {
            string str = "(строка)";
        }
    }
По-моему лучший ответ, разве нет?))
0
119 / 84 / 42
Регистрация: 14.12.2015
Сообщений: 945
12.04.2019, 06:12
ShmelVG, аплодирую стоят. Много времени ушло на решение?))
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
12.04.2019, 07:36
Лучший ответ Сообщение было отмечено amr-now как решение

Решение

Utopky, ShmelVG, Talamaur, с добрым утром.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Text.RegularExpressions;
 
namespace Question2435196_Парные_Скобки
{
    class Program
    {
        static void Main(string[] args)
        {
            var str = "((строка)  (вторая))"; // Строка, в которой ищем правильность расстановки скобок
            Regex regex = new Regex(@"^\(
                    (?>
                    [^()]+
                    |
                    \((?<DEPTH>)
                    |
                    \)(?<-DEPTH>)
                    )*
                    (?(DEPTH)(?!))
                \)$",
            RegexOptions.IgnorePatternWhitespace);
 
            if (regex.IsMatch(str))
                Console.WriteLine("Правильность расстановки скобок правильная.");
            else
                Console.WriteLine("Правильность расстановки скобок неправильная.");
 
            Console.ReadKey();
        }
    }
}
По статистике данное регулярное выражение понимает 0.03% программистов. Препод тоже не поймёт.
Я кстати тоже не все компоненты помню ))
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
12.04.2019, 08:54
amr-now, мне кажется только 0.03% прочли толстенную книгу по регулярным выражениям))
1
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
12.04.2019, 09:03
amr-now, В задании было ещё
Цитата Сообщение от Utopky Посмотреть сообщение
Если скобки расставлены неверно, то исправить.
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
12.04.2019, 09:47
samana, имхо, для многоуровневых скобок проще, чтобы форма ввода ткнула пальцем пользователю, что в текстовом поле скобки не соответствуют. Пользователь сам расставит по своему вкусу.

Иначе корректность расстановки скобок никто гарантировать не будет.
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
12.04.2019, 10:07
amr-now, Согласен. Я то не настаиваю, просто уточнил задание.
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
12.04.2019, 14:39
Лучший ответ Сообщение было отмечено amr-now как решение

Решение

Ещё можно перебирать символы. А поскольку код становится более управляемым нами, то можно под шумок выводить найденные косяки.
Тут уже почти автоисправление )) "Программа сама бы исправила, да деньги надо."
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
 
namespace Question2435196_Парные_Скобки
{
    class Program
    {
        static void Main(string[] args)
        {
            var str = "((строка) ((вторая))"; // Строка, в которой ищем правильность расстановки скобок
 
            var tuple = Check(str);
            if (tuple.Item1)
                Console.WriteLine("Правильность расстановки скобок правильная.");
            else if (tuple.Item2 >= 0)
                Console.WriteLine($"В позизиции {tuple.Item2} обнаружена непарная закрывающая скобка!");
            else
                Console.WriteLine($"В строке не хватает {tuple.Item3} закрывающих скобок!");
 
            Console.ReadKey();
        }
        /// <summary>
        /// Проверка парных закрывающих скобок
        /// </summary>
        /// <param name="str">строка, в которой проверяется парность скобок</param>
        /// <returns></returns>
        private static Tuple<bool, int, int> Check(string str)
        {
            int counter = 0;
            for (int i = 0, len = str.Length; i < len; ++i)
            {
                var c = str[i];
                switch (c)
                {
                    case '(':
                        ++counter;
                        break;
                    case ')':
                        if (counter > 0)
                            --counter;
                        else
                            return new Tuple<bool, int, int>(false, i, 0);
                        break;
                }
            }
            return counter > 0 ? new Tuple<bool, int, int>(false, -1, counter) : new Tuple<bool, int, int>(true, -1, 0);
        }
    }
}
Поприкалывался со ссылочным кортежом. Можно и с ValueTuple, но идея понятна.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
12.04.2019, 14:55
Цитата Сообщение от amr-now Посмотреть сообщение
понимает 0.03% программистов
regex101 не понимает группу с DEPTH, пошел гуглить руками...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.04.2019, 14:55
Помогаю со студенческими работами здесь

Проверка на правильность расстановки скобок
Дан текст. Проверить, правильно ли в нем расставлены круглые скобки (т. е. находится ли справа от каждой открывающей скобки соответствующая...

Написать программу, проверяющую правильность расстановки скобок
1 «Арифметическое выражение». Исходные данные - арифметическое выражение. Написать программу, проверяющую: - Правильность расстановки...

Используя стек проверить правильность вложений операторных скобок
в файле находится текст программы на c# . используя стек проверить правильность вложений операторных скобок ({}) в этой программе

Проверить правильность вложенности и баланс открывающих и закрывающих скобок
Здравствуйте. Помогите пожалуйста, необходимо сделать проверку скобок, чтобы она не начиналась на &quot;)&quot;. Если эта скобка...

Дана строка, содержащая круглые скобки. Проверить правильность расположения скобок
Может кто-то помочь. Дана строка, содержащая круглые скобки. Проверить правильность расположения скобок. В случае ошибки указать позицию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru