C++字符串比较

本文深入探讨了字符串比较的机制,不仅关注字符的ASCII值对比,还解析了当字符串前部分字符相同时如何通过比较长度来确定大小。通过具体实例说明了如何在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; // 比较哪个字符串长度大
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值