String Comparison return value (Is is used in applications that sorts characters ?)

狂风中的少年 提交于 2019-12-11 07:46:52

问题


When we use strcmp(str1, str2); or str1.compare(str2); the return values are like -1, 0 and 1, for str1 < str2, str1 == str2 or str1 > str2 respectively.

The question is, is it defined like this for a specific reason? For instance, in binary tree sorting algorithm, we push smaller values to the left child and larger values to the right child. This strcmp or string::compare functions seem to be perfect for that. However, does anyone use string matching in order to sort a tree (integer index are easier to use) ?

So, what is the actual purpose of the three return values ( -1, 0, 1). Why cant it just return 1 for true, and 0 for false?

Thanks


回答1:


The purpose of having three return values is exactly what it seems like: to answer all questions about string comparisons at once.

Everyone has different needs. Some people sometimes need a simple less-than test; strncmp provides this. Some people need equality testing; strncmp provides this. Some people really do need to know the full relationship between two strings; strncmp provides this.

What you absolutely don't want is someone writing this:

if(strless(lhs, rhs))
{
}
else if(strequal(lhs, rhs))
{
}

That's doing two potentially expensive comparison operations. strless also knows if they were equal, because it had to get to the end of both strings to return that it was not less.

Oh, and FYI: the return values isn't -1 or +1; it's greater than zero or less than zero. Or zero if they're equal.




回答2:


It's useful for certain cases where knowing all three cases is important. Use operator< for string when you just care about a boolean comparison.




回答3:


It could, but then you would need multiple functions for sorting and comparison. With strcmp() returning smaller, equal or bigger, you can use them easily for comparison and for sorting.

Remember that BSTs are not the only place where you would like to compare strings. You might want to sort a name list or similar. Also, it is not uncommon to have a string as key in a tree too.




回答4:


As others have stated, there are real purposes for comparison of strings with < > == implications. For example; fixed length numbers assigned to strings will resolve correctly; ie: "312235423" > "312235422". On some occasions this is useful.

However the feature you're asking for, true/false for solutions still works with the given return values.

if (-1)
  {
     // resolves true
  }
else if (1)
  {
     // also resolves true
  }
 else if (0)
  {
    // resolves false
  }


来源:https://stackoverflow.com/questions/7614852/string-comparison-return-value-is-is-used-in-applications-that-sorts-characters

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!