2012-02-15 5 views
12

PHP на этой функции немного скудны, и я читал, что эта функция сравнивает значения ASCII так ...Почему "echo strcmp ('60 ',' 100 '); в php-выходе 5? документация

echo strcmp('hello', 'hello'); 
//outputs 0 as expected - strings are equal. 
echo '<hr />'; 

echo strcmp('Hello', 'hello'); 
//outputs -32, a negative number is expected as 
//uppercase H has a lower ASCII value than lowercase h. 
echo '<hr />'; 

echo strcmp('60', '100'); 
//outputs 5. 

Последний пример сбивает с толку меня. Я не понимаю, почему он выводит положительное число.

  • ASCII-Значение 0 = 48
  • ASCII-значение 1 = 49
  • ASCII Значение 6 = 54

  • Общая стоимость ASCII от '60' = (54 + 48) = 102

  • Общая стоимость ASCII, из '100' = (49 + 48 + 48) = 145

The STRCMP() функции в ы Айинг, что «60» является «больше», чем «100», даже если кажется, что значение ASCII и длина строки «100» больше «60»

Может кто-нибудь объяснить, почему?

Благодаря

ответ

13

strcmp() возвращает разность первого несоответствующим характера между строками.

6 - 1 5.

Когда вы смотрите на это, вы, вероятно, не видя символов или цифр — только номера

+6

Обратите внимание, что это не гарантированное поведение - гарантируется только то, что для этих входных параметров значение будет больше нуля. –

+2

@SimonRichter: Согласен, что это не гарантируется. Но это * традиционно. Некоторый код, который я написал в 1978 году, который зависит от этого метода вычисления возвращаемого значения *, все еще работает *! – wallyk

+0

@wallyk, откуда вы знаете, что этот ответ правильный, когда в документации не было сказано, что он возвращает разницу первого символа? – Pacerier

8

Поскольку strcmp() останавливается на первой разности он находит. Следовательно, разница между значением ASCII «1» и значением ASCII «6»

+0

@wallyk, откуда вы знаете, что такое поведение гарантируется, когда в документации не говорится, что он возвращает разницу первого символа? – Pacerier

5

6 имеет 5 "больше", чем 1. Это лексическое сравнение. Первый символ отличается, вот где сравнение останавливается.