字符串的比较不完全是字符串长度的比较:
1、首先是逐个字符的ASCII值的比较至到某个字符的ASCII值不一致或者其中一个字符串到达字符串末尾{
"abcd"与"ba"比较,"ba"大,因为"ba"的字符'b'比"abcd"的字符'a'的ASCII值大
}
2、如果字符串的前n个字符都一样就比较字符串长度,长度长的字符串大{
"abc"与"abcd"比较,"abcd"大。前三个字符的ASCII值相等无法判断字符串相等,再比较字符串长度
"abc"与"abc"比较,两个字符串相等
}
#include <cstring> // for memcmp
#include <string> // for std::string
/**
* 如果lval > rval返回 1
* 如果lval == rval返回 0
* 如果lval < rval返回 -1
* lval和rval都不能是空字符串,没有意义
*/
int compareString(string lval,string rval)
{
// 比较字符串较小长度的前n个字节的ASCII码大小,一旦某个字符的ASCII值不相等memcmp就终止比对
int res = memcmp(lval.c_str(), rval.c_str(), std::min(lval.size(),rval.size()));
if (res != 0) // 此时字符串的比较和长度没有关系,只关注字符串的ASCII值
{
return res > 0 ? 1 : -1;
}
if (lval.size() == rval.size()) // 两个字符串完全一致
{
return 0;
}
return lval.size() > rval.size() ? 1 : -1; // 比较哪个字符串长度大
}