12

PHP 关于这个函数的文档有点稀疏,我读过这个函数比较 ASCII 值,所以......

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

  • '60' 的总 ASCII 值 = (54 + 48) = 102

  • '100' 的总 ASCII 值 = (49 + 48 + 48) = 145

strcmp() 函数说 '60' 比 '100' “更大”,即使 '100' 的 ASCII 值和字符串长度似乎大于 '60'

谁能解释为什么?

谢谢

4

3 回答 3

13

strcmp()返回字符串之间第一个不匹配字符的差。

6-1是 5。

当你看它时,你可能看不到字符或数字——只是数字

于 2012-02-15T07:43:48.057 回答
8

因为strcmp()在它发现的第一个差异处停止。因此 '1' 的 ASCII 值和 '6' 的 ASCII 值之间的差异

于 2012-02-15T07:45:03.707 回答
5

6 比 1“大”5。这是词法比较。第一个字符不同,这就是比较停止的地方。

于 2012-02-15T07:45:22.833 回答