我想比较两个字符串 s1 和 s2,两个字符串之间可以有空字符。 我想要区分大小写和不敏感的比较,如 strcmp 和 strcasecmp。 假设我的字符串是:
s1="Abcd\0abcd"
s2="Abcd\0cccc"
strcasecmp 和 strcmp 在这种情况下最终给出相等,并跳过之后的比较 我可以使用任何库来比较这些字符串
区分大小写的比较很简单:
// 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);
});