私は2つの文字列を同様に比較する関数を実装することになっていますstrcmp
が、空白文字は無視するので、
strcmpignorews("abc ", " a b c")
同じ結果が得られるはずです。
これが私の実装です:
namespace {
void SkipWhitespace(const char *&s) {
for (; std::isspace(*s, std::locale::classic); ++s);
}
}
int strcmpignorews(const char *s1, const char *s2) {
for (; *s1 != '\0' && *s2 != '\0'; ++s1, ++s2) {
SkipWhitespace(s1);
SkipWhitespace(s2);
if (*s1 != *s2) {
break;
}
}
return (*s1 < *s2) ? -1 : ((*s1 == *s2) ? 0 : 1);
}
ここで問題は、SkipWhitespace 関数をインライン化することに意味があるかどうかです。ループやスイッチを含む関数に使用してはならない場所をどこかで読んだことがあると思いinline
ますが、場所と理由を思い出せません。