Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 06.02.2012
Сообщений: 10

Написать алгоритм проверки корректности регулярного выражения

06.02.2012, 19:29. Показов 2862. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Следующая задача. Есессно на шарпе)

написать алгоритм проверки корректности регулярного выражения, которое включает [,],(,)
т.е, например ([][[]()]) - правильно, ([][]()]) - неправильно
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.02.2012, 19:29
Ответы с готовыми решениями:

Регулярное выражение для проверки корректности арифметического выражения
В этой теме https://www.cyberforum.ru/csharp-beginners/thread789349.html обсуждалось создание регулярного выражения для проверки введенного...

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

Написать алгоритм проверки корректности регулярного выражения
Написать алгоритм проверки корректности регулярного выражения, которое включает ,(,) т.е., например (()]) - правильно, (()]) –...

7
 Аватар для KarmaMaker
91 / 90 / 11
Регистрация: 09.12.2011
Сообщений: 233
06.02.2012, 19:52
Держи:

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
using System;
using System.Collections.Generic;
namespace justForFun
{
    class MainClass
    {
        static void Main()
        {
            string expression = "([{]({[}]))";
            Console.WriteLine("The answer is: " + TryParse(expression));
            Console.ReadLine();
        }
 
        static bool TryParse(String expression)
        {
            // Счетчики количества открытых скобок
            int roundBracketsCntr = 0;
            int squareBracketsCntr = 0;
            int curlyBracketsCntr = 0;
            foreach (char symbol in expression)
            {
                switch (symbol)
                {
                    case '(': { roundBracketsCntr++; break; }
                    case ')': { roundBracketsCntr--; break; }
                    case '[': { squareBracketsCntr++; break; }
                    case ']': { squareBracketsCntr--; break; }
                    case '{': { curlyBracketsCntr++; break; }
                    case '}': { curlyBracketsCntr--; break; }
                    default : { return false; } // wrong symbol
                }
            }
 
            return roundBracketsCntr == 0
                && squareBracketsCntr == 0
                && curlyBracketsCntr == 0;
        }
    }
}
1
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
06.02.2012, 20:26
KarmaMaker, у этого алгоритма есть одно маленькое но: на тестах ")(" или "[(])" он выдает истину.
Реализация через стек
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
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        Console.WriteLine("Результат: " + TryParse("([{]({[}]))"));
        Console.WriteLine("Результат: " + TryParse(")("));
        Console.WriteLine("Результат: " + TryParse("[(])"));
        Console.WriteLine("Результат: " + TryParse("[()]{([])}"));
    }
 
    const string openBrackets = "([{";
    const string closeBrackets = ")]}";
 
    static bool TryParse(string expression)
    {
        var stack = new Stack<char>();
        int index;
        foreach (var symbol in expression)
            // Если очередной символ - открывающая скобка
            if (openBrackets.IndexOf(symbol) != -1)
                stack.Push(symbol);
            else
                // Если очередной символ - закрывающая скобка
                if ((index = closeBrackets.IndexOf(symbol)) != -1)
                    if (stack.Count != 0 && stack.Peek() == openBrackets[index])
                        stack.Pop();
                    else
                        return false;
        return stack.Count == 0;
    }
}
1
 Аватар для KarmaMaker
91 / 90 / 11
Регистрация: 09.12.2011
Сообщений: 233
06.02.2012, 20:35
Истинно так, с другой стороны какие тесты:
([][[]()]) - правильно, ([][]()]) - неправильно
Такая и реализация.
0
1 / 1 / 0
Регистрация: 06.02.2012
Сообщений: 10
08.02.2012, 14:08  [ТС]
KarmaMaker, сейчас начал подробно вникать в код...не мог бы объяснить основные моменты поподробнее?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
08.02.2012, 14:14
Цитата Сообщение от Idik Посмотреть сообщение
KarmaMaker, сейчас начал подробно вникать в код...не мог бы объяснить основные моменты поподробнее?
я считаю есть, что нужно смотреть код именно, Blood-Angel.
0
1 / 1 / 0
Регистрация: 06.02.2012
Сообщений: 10
08.02.2012, 17:51  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
я считаю есть, что нужно смотреть код именно, Blood-Angel.
никогда не работал со стеком пока что...
Повторюсь, только начинаю постигать шарп....

Зачем была введена фигурная скобка?
0
 Аватар для KarmaMaker
91 / 90 / 11
Регистрация: 09.12.2011
Сообщений: 233
08.02.2012, 21:04
я считаю есть, что нужно смотреть код именно, Blood-Angel.
Какбэ плюс один. Решение предложенное Blood-Angel более коректно.
никогда не работал со стеком пока что...
Там все не так сложно:
Немного изменил форматирование добавил комментарии в стиле КО.
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
49
50
51
52
53
54
55
56
using System;
using System.Collections.Generic;
namespace JustForFun
{
    class MainClass
    {
        static void Main ()
        {
            // Просто прогон тестов
            Console.WriteLine ("Результат: " + TryParse ("([]([()]))"));
            Console.WriteLine ("Результат: " + TryParse (")("));
            Console.WriteLine ("Результат: " + TryParse ("[(])"));
            Console.WriteLine ("Результат: " + TryParse ("[()]([])"));
            
            Console.ReadLine ();
        }
 
        const string openBrackets = "([";
        const string closeBrackets = ")]";
 
        static bool TryParse (string expression)
        {
            // Инициализация стека
            Stack<char> stack = new Stack<char> ();
            
            int index;
            foreach (var symbol in expression) 
            {
                // Если очередной символ - открывающая скобка
                // Дословно если удается найти символ в строке "openBrackets"
                if (openBrackets.IndexOf (symbol) != -1) 
                {
                    // Добавляем открывающуюся скобку в стек
                    stack.Push (symbol);
                }
                // Если очередной символ - закрывающая скобка
                else if ((index = closeBrackets.IndexOf (symbol)) != -1) 
                {
                    // Если стек не пуст и последнее добавленная в него открывающаяся скобка 
                    // соответствует текущей закрывающейся скобке 
                    if (stack.Count != 0 && stack.Peek () == openBrackets[index]) 
                    {
                        // Удалить последнюю открывающуюся скобку из стека.
                        stack.Pop ();
                    }
                } 
                // Если какой - то левый символ
                else 
                {
                    return false;
                }
            }
            return stack.Count == 0;
        }
    }
}


И кстати да, фигурная скобка там не нужна
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.02.2012, 21:04
Помогаю со студенческими работами здесь

Как написать функцию проверки регулярного выражения?
На php так, а как на js? //Проверить строку - только английские буквы и цифры и нижнее подчеркивание function...

Алгоритм проверки корректности пароля
Здравствуйте, помогите, пожалуйста, в университете дали задание сделать сайт с помощью html, но на одной из страниц этого сайта должен быть...

Алгоритм проверки корректности пароля
У меня есть проблема. В университете дали задание сделать сайт с помощью html, но на одной из страниц этого сайта должен быть пароль...

Программа для проверки корректности записи арифметического выражения
Не могу понять даже с чего начинать писать код,может кто либо объяснить как это сделать?

Написать программу проверки корректности ввода строки по данной маске
Использовать типы данных множество и строка для ввода информации по заданной маске: 2 буквы, 3 цифры, 1 буква (ББЦЦЦБ) написать программу...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru