Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 22.09.2017
Сообщений: 27

Проверить корректность строки: для каждой закрывающей скобки должна быть своя открывающая

15.10.2018, 18:02. Показов 3996. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два вида скобок, {}, (), данная входная строка, состоящая из этих символов, надо определить, корректная или строку, то есть для каждой закрывающей скобки должна быть своя открывающая.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.10.2018, 18:02
Ответы с готовыми решениями:

Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки
Доброго времени суток. Подскажите пожалуйста алгоритм или путь к решению задачи, используя СТЕК Дана ПСП, ваша задача для каждой...

Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки
Даны 4 вида скобок () {} <>. Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки,использую стек. Помогите с...

Для каждой строки сформировать новую, поместив в нее слова исходной, заключенные в скобки
Здравствуйте! Помогите с написание программы. Нужны 2 программы, цель обеих: из входного потока вводится произвольное число строк....

7
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
15.10.2018, 18:26

Не по теме:

Цитата Сообщение от AndreyWOTlow Посмотреть сообщение
Как? я не могу уже
Судя по вашим темам, напрашивается простой ответ - учить ;D


Посчитать сколько в строке встречается каждый из символов и сравнить: открывающихся и закрывающихся скобок одного типа, должно быть одинаковое количество. По сути, результат обработки строки, может быть в виде такого массива:
PHP
1
2
3
4
5
6
[
    '(' => 3,
    ')' => 3,
    '{' => 5,
    '}' => 4
]
где ключами являются символы, а значениями - их количество. Теперь останется только сравнить:
PHP
1
2
3
$arr['('] == $arr[')'];
// и 
$arr['{'] == $arr['}'];
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
15.10.2018, 18:30
Lazy_Den, а такая строка '(}{)'? Это классическая задача на стек.
1
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
15.10.2018, 18:46
Лучший ответ Сообщение было отмечено AndreyWOTlow как решение

Решение

Примерно так. Не элегантно, но, вроде, работает:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$str = "{}()";
 
echo $fl = strpos($str, "{");
echo $fr = strpos($str, "}");
echo $kl = strpos($str, "(");
echo $kr = strpos($str, ")");
 
 
if($fl !== false){
    echo (($fr !== false) && ($fl == $fr - 1)) ? "{} расположены корректно" : "{} расположены не корректно";
}
 
if($kl !== false){
    echo (($kr !== false) && ($kl == $kr - 1)) ? "() расположены корректно" : "() расположены не корректно";
}
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
15.10.2018, 18:50
Пифагор, (())
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
15.10.2018, 18:55
Jewbacabra, насколько я понял, речь идет о 2 парах скобок.

Добавлено через 41 секунду
разных скобок.
Ежели я ошибаюсь, тогда "ой".
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
15.10.2018, 19:53

Не по теме:

Цитата Сообщение от Jewbacabra Посмотреть сообщение
а такая строка '(}{)'?
Если речь идёт о балансе скобок, а не просто о парных, то проще уже регуляркой проверить. Но т.к. от ТС ожидают скорее всего циклов, то алгоритм я описать могу, но не готовое решение, тем более, что масса решений уже давно существуют в сети.



Пусть будет функция checkBracketsBalance, принимающая строку символов.
  1. Создаём временный массив $tmp, куда в дальнейшем будем складывать все открывающиеся скобки.
  2. Бежим циклом по строке. Можно for и обращаться к символу строки по индексу, можно разбить строку на массив символов (напр., str_split) и цикл foreach
  3. В цикле условие:
    • если текущий символ ")" или "}", то извлекаем из временного массива последний добавленный символ (array_pop), который должен быть открывающимся "(", если текущий символ ")" или открывающимся "{", если текущий символ "}". Если это условие не верно, то возвращаем false
    • иначе, если текущий символ - это любая открывающая скобка, то добавляем её во временный массив.
  4. После цикла, возвращаем результат проверки empty($tmp);, где временный массив $tmp должен быть пустым, если баланс скобок прошел проверку удачно.
0
 Аватар для Строитель
1084 / 746 / 364
Регистрация: 09.07.2018
Сообщений: 1,760
16.10.2018, 01:16
Цитата Сообщение от AndreyWOTlow Посмотреть сообщение
для каждой закрывающей скобки должна быть своя открывающая
Кликните здесь для просмотра всего текста
PHP
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
$str = 'Строка с ( вложенными (скобками) для () примера';
(new StackBrackets($str))->view();
 
echo '<br>';
 
$str = 'Строка с { фигурными {скобками} для } примера';
(new StackBrackets($str, '{}'))->view();
 
 
class StackBrackets
{
    private $brackets;
    private $pattern;
    private $stack;
 
    public function __construct($str, $pcre = '()')
    {
        $this->brackets = preg_replace("~[^$pcre]~", '', $str);
        $this->pattern = substr($pcre, 0, 1);
        $this->stack = [];
    }
 
    /**
     * Вывод в браузер
     */
    public function view()
    {
        if ($this->check()) {
            echo 'Последовательность скобок верна!';
        } else {
            echo 'Последовательность скобок нарушена!';
        }
    }
 
    /**
     * Обработка стека с последующей валидацией
     * @return bool
     */
    private function check()
    {
        for ($i = 0, $all = strlen($this->brackets); $i < $all; $i++) {
            $element = $this->brackets[$i];
            if ($element == $this->pattern) {
                $this->addBracket($element);
            } else {
                $current = $this->delBracket();
                if ($current != $this->pattern) {
                    return false;
                }
            }
        }
 
        return ($this->allBrackets() <= 0);
    }
 
    /**
     * Добавление скобки вверх стека
     * @param $item
     */
    private function addBracket($item) {
        array_unshift($this->stack, $item);
    }
 
    /**
     * Удаление верхней скобки из стека с возвратом значения
     * @return bool|mixed
     */
    private function delBracket() {
        return empty($this->stack) ? false : array_shift($this->stack);
    }
 
    /**
     * Размер стека
     * @return int
     */
    private function allBrackets() {
        return count($this->stack);
    }
}


Добавлено через 7 минут
Результат работы скрипта:
Кликните здесь для просмотра всего текста
HTML5
1
2
Последовательность скобок нарушена!
Последовательность скобок верна!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2018, 01:16
Помогаю со студенческими работами здесь

Написать программу , для удаления части символов строки заключенную в скобки(вместе с ними). P.s. Строка может быть любая
Помогите пожалуйста.

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

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

Проверить корректность строки, введённой пользователем
Я написал функцию, генерирующую случайную строку по заданному формату, но кроме этого по условию нужно иметь возможность ввести строку в...

Проверить на корректность неравенство, заданное в формате строки
Проверить на корректность неравенство, заданное в формате строки: a±b ? c±d. Строка может содержать целые числа, операции сложения и...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
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/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru