Сравнение строк без учета регистра в C++

Воспользуйтесь преимуществами cxx стандартного char_traits. Напомним, что cpp std::string на самом деле является определением string-manipulation типа для std::basic_string или, более явно, std::basic_string >. Тип str char_traits описывает, как сравниваются cxx символы, как они копируются, как cxx они приводятся и т. Д. Все, что c++ вам нужно сделать, это ввести strings новую строку поверх basic_string и предоставить empty-string ей свой собственный char_traits, который c++ сравнивает нечувствительность cpp к регистру. / p>

struct ci_char_traits : public char_traits {
    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) {
        while( n-- != 0 ) {
            if( toupper(*s1) < toupper(*s2) ) return -1;
            if( toupper(*s1) > toupper(*s2) ) return 1;
            ++s1; ++s2;
        }
        return 0;
    }
    static const char* find(const char* s, int n, char a) {
        while( n-- > 0 && toupper(*s) != toupper(a) ) {
            ++s;
        }
        return s;
    }
};

typedef std::basic_string ci_string;

Подробности c++ на Guru of The Week number 29.

c++

string

2022-11-21T06:20:31+00:00