Author Topic: Вычисление примера в строковой переменной  (Read 2105 times)

0 Members and 1 Guest are viewing this topic.

Svarog

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Приветствую уважаемых пользователей Кликермана и прошу небольшой помощи)
На входе имеем капчу из арифметического примера состоящего из двух одно или двухзначных чисел вида:

1+4=? или 2+45=? или 23-1=? или 99+57=?

С помощью алгоритма уважаемого dramsterа капча замечательно распознается (мой земной поклон dramsterу за замечательно работающий скрипт), на выходе имеем строку:

 $all_str= 1+4=? или 2+45=? или 23-1=? или 99-57=?

то есть строковую переменную...
И собственно, сам вопрос. Как мне понять (в арифметическом смысле) знак в примере, плюс или минус и решить эту капчу?
Фильтруя сию переменную, получаю чистый пример:

$all_str = STRFILTER($all_str, "=?", 0)

4+67 или 45-23 или 67-2... и т.д.
снова фильтрую строку, получаю переменную знака: плюс или минус:

$ZN= STRFILTER($all_str, "-+", 1)

далее фильтрую получившийся результат по знаку $ZN, вношу данные в массив и имею два числа в массиве:

strseparate($all_str, $ZN, $arr)

И вот тут у меня случился глюк, не могу понять как решить этот пример, складывать или вычитать? Т.е. проблема с определением знака.
Решение сканировать картинку знака - не комильфо... кажется мне, что есть более элегантное решение, а вот найти его не могу, так как в строковых переменных пока еще не рублю). И вот собственно прошу помощи у более опытных товарищей) 
« Last Edit: April 29, 2018, 02:20:56 PM by Oraven »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Строковая переменная, прошу помощи)
« Reply #1 on: April 29, 2018, 02:16:59 PM »
Code: (clickermann) [Select]
$all_str= "99+57=?"
$all_str = STRFILTER($all_str, "=?", 0)

IF(STRPOS($all_str, "+") > 0)
   STRSEPARATE($all_str, "+", $arr)
   $all_str = $arr[0]+$arr[1]
ELSE
   STRSEPARATE($all_str, "-", $arr)
   $all_str = $arr[0]-$arr[1]
END_IF
UNDEFINE($arr)

LOGWRITE ($all_str)
HALT

Svarog

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Да да да!!!
Вот на что ума у меня и не хватило))) сравнить с нулем!
Спасибо уважаемый наш Oraven. Все чудненько работает)