比较两个字符串之间可以有空字符

问题描述 投票:0回答:1

我想比较两个字符串 s1 和 s2,两个字符串之间可以有空字符。 我想要区分大小写和不敏感的比较,如 strcmp 和 strcasecmp。 假设我的字符串是:

s1="Abcd\0abcd"
s2="Abcd\0cccc"

strcasecmp 和 strcmp 在这种情况下最终给出相等,并跳过之后的比较 我可以使用任何库来比较这些字符串

c++ strcmp
1个回答
0
投票

区分大小写的比较很简单:

// or use std::string prior to C++17
std::string_view s1 = "Abcd\0abcd";
std::string_view s2 = "Abcd\0cccc";

s1 == s2; // true

std::string_view
已经不关心字符串中的空字符,因此您可以使用重载的
==
运算符。

不区分大小写的比较稍微困难一些,但可以使用

std::ranges::equal
标题中的
std::equal
<algorithm>
轻松完成。

// C++20
bool eq = std::ranges::equal(s1, s2, [](unsinged char a, unsigned char b) {
    return std::tolower(a) == std::tolower(b);
});
// legacy
bool eq = std::equal(std::begin(s1), std::end(s1), std::begin(s2), std::end(s2),
    [](unsigned char a, unsigned char b) {
        return std::tolower(a) == std::tolower(b);
    });
© www.soinside.com 2019 - 2024. All rights reserved.