[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Упражнение: корректность строки
T1grOK
Не знаю может такая тема уже и была. Если что повторюсь.
Нужно написать PHP код, который проверит строку на корректность

$str = '()(({{)}}){}'; // в принципе строка может быть произвольная, с различным набором скобок!

То есть нужно проверить все ли скобки(фигурные и обычные) правильно открыты и закрыты и в зависимости от результата вывести "Строка корректна!" или "Строка некорректна!"
Предлагайте решения. Интересно, кто как решит данную задачу.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
Что совсем никто думать не хочет, смекалку проявлять? smile.gif

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
inpost
А есть ли какое содержание внутри скобок? smile.gif
В целом я решил задачу, просто не хочу выставлять, пусть другие думают.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
kaww
function checkStr($string, $bkt = array())
{
$s = array();
for ($i = 0; ($l = mb_substr($string, $i, 1)); ++$i) {

if (isset($bkt[$l])) {

$s[] = $bkt[$l];
} else if (end($s) == $l) {

unset($s[key($s)]);
}
}

return empty($s) ? 'Строка корректна!' : 'Строка некорректна!';
}

$string = '()(({{)}}){}';
echo checkStr($string, array(
'(' => ')',
'{' => '}'
));
glock18
Цитата (T1grOK @ 1.06.2013 - 08:59)
Что совсем никто думать не хочет, смекалку проявлять? smile.gif

Предположу, что вы сами знаете, что это легко решается стеком rolleyes.gif Где тут смекалка? Уж больно просто smile.gif
T1grOK
Цитата (glock18 @ 1.06.2013 - 10:45)
Цитата (T1grOK @ 1.06.2013 - 08:59)
Что совсем никто думать не хочет, смекалку проявлять? :)

Предположу, что вы сами знаете, что это легко решается стеком :rolleyes: Где тут смекалка? Уж больно просто :)

Не поверишь, но многие не могут решить даже как нибудь ).
Я решил в лоб.
$str = '{}(({}))({}()){{}}';
$correct = true;
$array = array();
$strlen = strlen($str);

if($strlen > 1){
for($x=0; $x < strlen($str); $x++){
$simbol = $str{$x};

// Фиксация открывающихся скобок
if($simbol == '('){
$array[] = ')';
continue;
}elseif($simbol == '{'){
$array[] = '}';
continue;
}

/*
* Поиск соответствия
*/


$cnt = count($array);
// Нет открывающейся скобки или скобки не правильно закрыты
if(!$cnt || $array[$cnt - 1] != $simbol){
$correct = false;
break;
}
array_pop($array);
}

// Если открывающихся скобок чересчур много, но в целом цепочка шла правильно
if(count($array)) $correct = false;

}elseif($strlen == 1){
$correct = false;
}/*else{
пустую строку считаем корректной
}*/


echo $correct ? 'Корректно!' : 'Некорректно!';


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.