MasterGerold
@MasterGerold

Как сделать строчный калькулятор?

Доброго времени суток. Не могу понять какими средствами можно сделать данную задачу. Есть функция, на вхождение строка: Например "10+10*2+10". С помощью каких функций можно сделать решение этого примера? Буду очень благодарен, а то не могу себе найти места :)
  • Вопрос задан
  • 356 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Вам нужно разбирать строку на лексемы регуляркой (что бы отделить числа от операторов). Результатом должно быть что-то такое:

['10', '+', '10', '*', '2', '+', '10']

Затем мы должны преобразовать массив в обратную польскую нотацию:

['10', '10', '10', '2', '*', '+', '+']

ну и далее мы уже можем выполнить выражение. Примеры подобного есть в сети.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
wielski
@wielski
✔ Совет: Вам помогли? Отметьте ответы решением.
Гуглите получше.
$ma = "2+10";

if(preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE){
    $operator = $matches[2];

    switch($operator){
        case '+':
            $p = $matches[1] + $matches[3];
            break;
        case '-':
            $p = $matches[1] - $matches[3];
            break;
        case '*':
            $p = $matches[1] * $matches[3];
            break;
        case '/':
            $p = $matches[1] / $matches[3];
            break;
    }

    echo $p;
}
Ответ написан
Комментировать
alsopub
@alsopub
При должной проверке входных данных - eval
$s = '10 + 10*2 + 10';
echo(eval('return '.$s.';'));

Плохо, но зато просто и быстро.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 11:48
10000 руб./за проект
19 апр. 2024, в 11:14
65000 руб./за проект