【发布时间】:2016-07-19 17:29:08
【问题描述】:
struct ci_char_traits : public std::char_traits<char>
{
static bool eq( char c1, char c2 ) { return toupper( c1 ) == toupper( c2 ); }
static bool ne( char c1, char c2 ) { return toupper( c1 ) != toupper( c2 ); }
static bool lt( char c1, char c2 ) { return toupper( c1 ) < toupper( c2 ); }
static int compare( const char* s1, const char* s2, size_t n );
static const char* find( const char* s, int n, char a );
};
using ci_string = std::basic_string<char, ci_char_traits>;
我正在使用这个 char_traits 导数,它应该可以帮助我处理不区分大小写的字符串比较。从字符文字构造 ci_strings 时它工作得非常好,但是我经常遇到我有一个或两个 std::strings 并希望不区分大小写地比较它们的情况。 有没有办法编写自定义构造函数或赋值/转换运算符以从 std::string 转换为 ci_string 或者除了迭代 std::strings 并在每个字符上调用 tolower 之外没有其他可能性?
【问题讨论】: