Автор Тема: Сравнение строк не работает для строк, содержащих # " '  (Прочитано 47 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Dimava

  • Зашел в гости
  • *
  • Сообщений: 3
    • Просмотр профиля
Код: Clickermann
  1. print("Hello, world!")
  2.  
  3. FOR($a=0,$a<50)
  4.   $c = char($a)
  5.   $v = $c ! $c
  6.   if (strlen($v) ! 1)
  7.      print("[",$a,"] ",strlen($v)," '",$c,"' ",$v)
  8.   end_if
  9. END_CYC
  10.  
  11. halt

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

Однако она выводит
Код: Clickermann
  1. 16:57:46 Hello, world!
  2. 16:57:46 [34] 7 '"' """!"""
  3. 16:57:46 [35] 5 '#' "0!"0
  4. 16:57:46 [39] 7 ''' "'"!"'"

Скорее всего это связано с тем, что перед eval-ом строки кода текст не escape-ится
« Последнее редактирование: Ноябрь 15, 2020, 09:22:29 pm от Dimava »

4.У.В.@.К

  • Освоившийся
  • **
  • Сообщений: 91
    • Просмотр профиля
Сравнение строк не работает для строк, содержащих # " '

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

Всё работает, если знать как сравнивать. Обычно делали так:
Код: Clickermann
  1. $str_1 = CHAR(34) // "
  2.  
  3. $str_2 = CHAR(35) // #
  4.  
  5. IF(STRMD5($str_1) = STRMD5($str_2))
  6.   LOGWRITE ("Равны")
  7. ELSE
  8.   LOGWRITE ("Не равны")
  9. END_IF
  10.  
  11. HALT

В логе:
19:17:56 Не равны