2012-02-15 6 views
12

de PHP en esta función es un poco escaso y he leído que esta función se comparan los valores ASCII de modo ...¿Por qué "echo strcmp ('60 ',' 100 ');" en la salida de php 5? documentación

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. 

El último ejemplo me está confundiendo. No entiendo por qué está produciendo un número positivo.

  • ASCII Valor 0 = 48
  • valor ASCII de 1 = 49
  • valor ASCII de 6 = 54

  • Valor total ASCII de '60' = (54 + 48) = 102

  • valor total ASCII de '100' = (49 + 48 + 48) = 145

El strcmp() funciones es s aying que '60' es "mayor" que '100' a pesar de que parece que el valor ASCII y longitud de la cadena de '100' es mayor que '60'

¿Alguien puede explicar por qué?

Gracias

Respuesta

13

strcmp() devuelve la diferencia del primer carácter no coincidente entre las cuerdas.

6-1 es 5.

Cuando se mire, es probable que no ver los caracteres o dígitos — sólo los números

+6

Tenga en cuenta que esto no es un comportamiento garantizado; lo único garantizado es que el valor será mayor que cero para estos parámetros de entrada. –

+2

@SimonRichter: De acuerdo, no está garantizado. Pero * es * tradicional. Cierto código que escribí en 1978 y que depende de este método de calcular el valor de retorno * todavía funciona *. – wallyk

+0

@wallyk, ¿cómo sabes que esta respuesta es correcta cuando la documentación no dice que devuelve la diferencia del primer personaje? – Pacerier

8

Debido strcmp() paradas en la primera diferencia que encuentra. Por lo tanto, la diferencia entre el valor ASCII de '1' y el valor ASCII de '6'

+0

@wallyk, ¿cómo sabes que este comportamiento está garantizado cuando la documentación no dice que devuelve la diferencia del primer personaje? – Pacerier

5

6 es 5 "mayor" que 1. Esta es la comparación léxica. El primer personaje es diferente, ahí es donde se detiene la comparación.

Cuestiones relacionadas