不区分大小写的字符串比较C++

Cof*_*ain 7 c++ case-insensitive string-comparison

我知道有一些方法可以做一些忽略比较,包括迭代字符串或一个好的 SO需要另一个库.我需要把它放在其他可能没有安装它的计算机上.有没有办法使用标准库来做到这一点?现在我正在做......

if (foo == "Bar" || foo == "bar")
{
cout << "foo is bar" << endl;
}

else if (foo == "Stack Overflow" || foo == "stack Overflow" || foo == "Stack overflow" || foo == "etc.")
{
cout << "I am too lazy to do the whole thing..." << endl;
}
Run Code Online (Sandbox Code Playgroud)

这可以极大地提高我的代码的可读性和可用性.感谢您阅读这篇文章.

小智 17

strncasecmp

strcasecmp()函数执行字符串s1s2的逐字节比较,忽略字符的大小写.如果找到s1,则它返回小于,等于或大于零的整数,小于,匹配或大于s2.

strncasecmp()函数类似,只是它比较不超过s1s2的n个字节...

  • @CoffeeRain:非常欢迎你!我很高兴你喜欢简单的旧学校C功能而不是mambo-jumbo C++ macaroni :) (3认同)
  • 它是标准C函数还是仅限POSIX? (2认同)

Gre*_*eys 7

通常我所做的只是比较一个较低版本的字符串版本,如:

if (foo.make_this_lowercase_somehow() == "stack overflow") {
  // be happy
}
Run Code Online (Sandbox Code Playgroud)

我相信boost内置了小写转换,因此:

#include <boost/algorithm/string.hpp>    

if (boost::algorithm::to_lower(str) == "stack overflow") {
  //happy time
}
Run Code Online (Sandbox Code Playgroud)

  • “ to_lower”的返回值是无效的。您必须先应用“ to_lower”,然后照常进行比较。在gcc上,上述操作会给您一个“无效值,不应忽略,因为它应该是”错误。 (2认同)