推荐使用std::string的==等运算符比较字符串;C风格字符数组则需用strcmp等函数,安全性与可读性较低。
在C++中比较两个字符串,核心要看你用的是哪种字符串类型:C风格字符数组(char[] 或 const char*)还是标准库的 std::string。方法不同,安全性和可读性差别很大。
std::string 的 == 和其他比较运算符这是最推荐、最直观的方式。只要两个对象都是 std::string,直接用 ==、!=、、 等即可,底层自动按字典序逐字符比较:
示例:
std::string a = "hello";"apple" 返回 true)
std::string::compare() 成员函数这个函数功能更细,返回 int 值:
s1.compare(pos, len, s2)
适合需要三态结果(小于/等于/大于)或做部分比较的场景。
strcmp()(仅限 C 字符串)如果操作的是以 \0 结尾的 const char*,可用 std::strcmp(需包含 ):
nullptr 会崩溃\0 结尾,否则行为未定义不建议在新代码中直接使用,除非对接 C API 或性能极端敏感且已确保安全。
标准库没提供现成函数,但有几种稳妥做法:
std::tolower 配合 std::equal:对两个字符串逐字符转小写再比较std::transform 把两个 std::string 全转成小写,再用 ==
std::ranges::equal + 自定义谓词,更简洁注意:纯 ASCII 场景用 std::tolower 安全;涉及 Unicode 时需用 ICU 或其他国际化库,std::tolower 不适用。