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

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

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2014, 20:43   #1
Testerok
 
Регистрация: 28.01.2014
Сообщений: 6
По умолчанию Задача на структуру данных. (Помогите)

Дано выражение.
Пример: [7] * 11 - ( 3 - 10 * [7-9]).
Написать функцию checkBrackets($s), которая принимает на вход строку с выражением и возвращает TRUE или FALSE. Если скобки расставлены правильно - TRUE, FALSE - в противном случае.
Пример не правильно расставленых скобок: ( 7 * 11 [ 9 ) - 9]
Нужно реализовать с помощью PHP
Testerok вне форума Ответить с цитированием
Старый 30.01.2014, 23:42   #2
Gocer
 
Регистрация: 22.06.2008
Сообщений: 7
По умолчанию

Перед употреблением протестировать.
Код:
function checkBrackets($value) {

        $value = preg_replace('/[^\[\]\(\)]+/', '', $value);

        while( $value != $temp = str_replace(array('[]', '()'), '', $value ) ){

                $value = $temp;

        }

        return ($value === '')? true:false;
}
Gocer вне форума Ответить с цитированием
Старый 03.02.2014, 13:32   #3
Testerok
 
Регистрация: 28.01.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Gocer Посмотреть сообщение
Перед употреблением протестировать.
Код:
function checkBrackets($value) {

        $value = preg_replace('/[^\[\]\(\)]+/', '', $value);

        while( $value != $temp = str_replace(array('[]', '()'), '', $value ) ){

                $value = $temp;

        }

        return ($value === '')? true:false;
}
Спасибо!!!

Последний раз редактировалось Testerok; 03.02.2014 в 13:37.
Testerok вне форума Ответить с цитированием
Старый 04.02.2014, 01:40   #4
Testerok
 
Регистрация: 28.01.2014
Сообщений: 6
По умолчанию

PHP код:
<?php
$exp 
"(7 * 11 [9) - 9]";
 
function 
brackets($exp){
    
$stack = array();
    for( 
$i=0$i<strlen($exp); $i++ ){
        if( 
$exp[$i]=="[" || $exp[$i]=="(" )
            
array_push$stack$exp[$i] );
        elseif( 
$exp[$i]=="]" || $exp[$i]==")" ){
            
$popElement array_pop($stack);
            if( 
$popElement!="[" && $popElement!="(" )
                return 
0;
        }
    }
    if( 
count($stack)==)
        return 
1;
    else
        return 
0;
}
 
echo 
brackets($exp);
?>
Выдает 1 (TRUE), а хотя это условие не верное. Как исправить?
Testerok вне форума Ответить с цитированием
Старый 04.02.2014, 07:01   #5
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Как я понимаю, это просто задача на алгоритм (без использования всяких функций).
Идея решения задачи следующая. Идём по строчке посимвольно и в случае "[" к переменной (которая изначально равна нулю) прибавляем 1, а в случае "]" отнимаем 1. По ходу цикла надо проверять, что переменная не меньше нуля.

Ну а тут небольшое усложнение задачи благодаря разным типам скобок.
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 10.02.2014, 18:18   #6
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию

если скобки могут быть раставлены произвольно а глубина не более 15 то интересное решение можно сделать на рекурсивных регулярках
подробнее тут
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись данных в структуру MatrixGru Общие вопросы Delphi 6 21.10.2013 10:30
задача на структуру(struct)/задача на работу с файлом SevenArth Помощь студентам 0 26.04.2012 19:06
С++.Ввод данных в структуру. Bullrock Помощь студентам 1 03.04.2012 13:55
[C++|Builder] Задача на структуру данных conqueror Помощь студентам 3 17.01.2009 14:25