当我们使用strcmp(str1, str2);
或str1.compare(str2);
时,返回值类似于-1,0和1,对于str1< str2,str1 == str2或str1> str2分别。
问题是,它是出于特定原因而定义的吗? 例如,在二叉树排序算法中,我们将较小的值推送到左子节点,将较大的值推送到右子节点。这个strcmp或string :: compare函数似乎是完美的。但是,是否有人使用字符串匹配来排序树(整数索引更容易使用)?
那么,三个返回值(-1,0,1)的实际目的是什么。为什么它不能只返回1表示真,0表示假?
由于
答案 0 :(得分:3)
具有三个返回值的目的正是它的样子:立即回答有关字符串比较的所有问题。
每个人都有不同的需求。有些人有时需要一个简单的小于测试; strncmp
提供了此功能。有些人需要平等测试; strncmp
提供了此功能。有些人确实需要知道两个字符串之间的完整关系; strncmp
提供此功能。
你绝对不想要的是有人写这个:
if(strless(lhs, rhs))
{
}
else if(strequal(lhs, rhs))
{
}
这是两个可能很昂贵的比较操作。 strless
也知道它们是否相等,因为它必须到达两个字符串的末尾才能返回它并不是更少。
哦,和FYI:返回值不是-1或+1;它大于零或小于零。如果它们相等,则为零。
答案 1 :(得分:0)
对于知道所有三种情况都很重要的某些情况,它很有用。当您只关心布尔比较时,请operator<
使用string
。
答案 2 :(得分:0)
可以,但是你需要多个功能来进行排序和比较。随着strcmp()返回更小,相等或更大,您可以轻松地使用它们进行比较和排序。
请记住,BST并不是您想要比较字符串的唯一地方。您可能希望对名称列表或类似名称进行排序。此外,在字符串中将字符串作为键也很常见。
答案 3 :(得分:0)
正如其他人所说的,将字符串与&lt;字符串进行比较的确有目的。 &GT; ==含义。例如;分配给字符串的固定长度数字将正确解析;即:“312235423”&gt; “312235422”。在某些情况下,这很有用。
然而,您要求的功能,解决方案的true / false仍然适用于给定的返回值。
if (-1)
{
// resolves true
}
else if (1)
{
// also resolves true
}
else if (0)
{
// resolves false
}