Поиск по этому блогу

вторник, 1 апреля 2014 г.

Математическое выражение. Алгоритм PHP.

Сегодня нашёл вот такую задачку:

Дано математическое выражение, нужно распечатать позиции открывающей и соответствующей закрывающей скобки. Порядок не имеет значения.
Примеры:
a*(b+c) => (2, 6); (a/(b+c))+d*(e-f) => (0, 8), (3, 7), (12, 16)
Я реализовал так:
<?php
$str = '(a/(b+c))+d*(e-f)';

$open = '(';
$close = ')';

$results = $a_open = array();

$open_counts = 0;

for($i = 0; $i < strlen($str); $i++) {
    /** Если открывающая скобка, то добавляем её в массив */
    if($str[$i] == $open) {
        $a_open[] = $i;
    }
    /** Если закрывающая скобка, то срезаем последнюю найденую позицию и переносим её в result. */
    if ($str[$i] == $close) {
        $last_open = array_pop($a_open);
        $results[] = array($last_open, $i);
    }
}
echo $str;
echo '<hr>';
echo '<pre>';
print_r($results);

Если у Вас есть более изящные решения, пишите в комменты.

Комментариев нет:

Отправить комментарий

Количество·просмотров