【发布时间】:2011-04-14 10:09:11
【问题描述】:
我的问题类似于this,但我有两个字符串(如char *),任务是将strnicmp 函数(仅适用于MS VC)替换为boost::iequals。
注意 strnicmp 不是 stricmp - 它只比较前 n 个字符。
有没有比这更简单的解决方案:
void foo(const char *s1, const char *s2)
{
...
std::string str1 = s1;
std::string str2 = s2;
int n = 7;
if (boost::iequals(str1.substr(0, n), str2)) {
...
}
}
【问题讨论】:
-
谢谢大家。我更喜欢
Xeo和unwind的答案。我从 c.l.c++ 知道James Kanze并尊重他作为专业人士,但在这种情况下,如果我有char *字符串,我更喜欢编写 C 样式函数而不是将它们转换为std::string。但是James的答案在std::strings 的情况下会很有趣,特别是如果您的编译器支持 lamda 表达式,因此您可以将EqIgnoreCase替换为 lambda :) 全部获得 +1。 -
boost::iequals适用于范围,您无需一直转换为std::string。 -
无法弄清楚如何将
boost::iequals与范围一起使用。你能提供一个例子吗? -
boost::iequals(boost:iterator_range(s1, s1+n), boost::iterator_range(s2, s2+n))。假设两个字符串至少和n一样长,否则先减少n。 -
也看看
boost::istarts_with,boost.org/doc/html/boost/algorithm/istarts_with.html