当我们使用strcmp(str1, str2);
或str1.compare(str2);
时,返回值分别为-1、0和1,分别用于str1 str2。
问题是,是否由于特定原因就这样定义了它?
例如,在二叉树排序算法中,我们将较小的值推入左侧子级,将较大的值推入右侧子级。这个strcmp或string::compare函数似乎非常适合。但是,是否有人使用字符串匹配对树进行排序(整数索引更易于使用)?
那么,这三个返回值(-1、0、1)的实际目的是什么。为什么不能只返回1代表真,返回0代表假?
谢谢
最佳答案
具有三个返回值的目的正好是这样:一次回答有关字符串比较的所有问题。
每个人都有不同的需求。有些人有时需要一个简单的小于检验; strncmp
提供了这一点。有些人需要平等测试。 strncmp
提供了这一点。有些人确实确实需要知道两个字符串之间的完整关系。 strncmp
提供了这一点。
您绝对不希望有人写这个:
if(strless(lhs, rhs))
{
}
else if(strequal(lhs, rhs))
{
}
这是在做两个可能比较昂贵的比较操作。
strless
也知道它们是否相等,因为它必须到达两个字符串的末尾才能返回不小于2的值。哦,仅供引用:返回值不是-1或+1;大于零或小于零。如果相等,则为零。