【发布时间】:2023-04-05 08:36:01
【问题描述】:
当我们使用strcmp(str1, str2); 或str1.compare(str2); 时,返回值分别为-1、0 和1,对于str1 str2。
问题是,这样定义是否出于特定原因? 例如,在二叉树排序算法中,我们将较小的值推送到左孩子,将较大的值推送到右孩子。这个 strcmp 或 string::compare 函数似乎是完美的。但是,是否有人使用字符串匹配来对树进行排序(整数索引更容易使用)?
那么,三个返回值(-1,0,1)的实际用途是什么。为什么不能只返回 1 为真,0 为假?
谢谢
【问题讨论】:
-
返回值实际上不是(-1, 0, 1)。如果您查看reference documents,它只会显示小于零、零或大于零的值。对于整数,你可以说
return num1 - num2;;对于字符串,类似。 -
@Bala R:实际上你不能像那样比较整数(下溢/上溢)。
-
@UncleBens:可以,因为该函数仅适用于 ASCII 文本。因此,可以假设所有输入都在 [0, 0x80) 范围内。
-
@Nicol: ... 并假设 char 是有符号类型?
-
@UncleBens:即使是有符号的,ASCII 也会停在 0x79,这是正数。如果值 >= 0x80,则它不是 ASCII 字符串。