С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/47: Рейтинг темы: голосов - 47, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 30.03.2019
Сообщений: 17

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

11.04.2019, 21:20. Показов 9090. Ответов 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
6496 / 3907 / 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
6496 / 3907 / 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
6496 / 3907 / 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
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru