C++字符串比较

 字符串的比较不完全是字符串长度的比较:
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; // 比较哪个字符串长度大
}

猜你喜欢

转载自blog.csdn.net/u010196624/article/details/89174827