Author Topic: Сравнение строк не работает для строк, содержащих # " '  (Read 1781 times)

0 Members and 1 Guest are viewing this topic.

Dimava

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Code: (clickermann) [Select]
print("Hello, world!")

FOR($a=0,$a<50)
   $c = char($a)
   $v = $c ! $c
   if (strlen($v) ! 1)
      print("[",$a,"] ",strlen($v)," '",$c,"' ",$v)
   end_if
END_CYC

halt

Очевидно, данная программа должна выводить ничего (она сравнивает символ с самим собой, и проверяет что получился 0)

Однако она выводит
Code: (clickermann) [Select]
16:57:46 Hello, world!
16:57:46 [34] 7 '"' """!"""
16:57:46 [35] 5 '#' "0!"0
16:57:46 [39] 7 ''' "'"!"'"

Скорее всего это связано с тем, что перед eval-ом строки кода текст не escape-ится
« Last Edit: November 15, 2020, 09:22:29 PM by Dimava »

4.У.В.@.К

  • Активный участник
  • ***
  • Posts: 117
    • View Profile
Сравнение строк не работает для строк, содержащих # " '

Не совсем понятно, что подразумевает фраза "Сравнение строк". Например с точки зрения коммунистической пропаганды в СССР - слово "Ленин" приравнивается к слову "Партия".
Строки "123" и "abc", тоже равны, только по длине.

Всё работает, если знать как сравнивать. Обычно делали так:
Code: (clickermann) [Select]
$str_1 = CHAR(34) // "

$str_2 = CHAR(35) // #

IF(STRMD5($str_1) = STRMD5($str_2))
   LOGWRITE ("Равны")
ELSE
   LOGWRITE ("Не равны")
END_IF

HALT

В логе:
Code: [Select]
19:17:56 Не равны