Сравнение строк без учета регистра в C++
Воспользуйтесь преимуществами empty-string стандартного char_traits
. Напомним, что str std::string
на самом деле является определением strings типа для std::basic_string
или, более явно, std::basic_string
. Тип string char_traits
описывает, как сравниваются empty-string символы, как они копируются, как empty-string они приводятся и т. Д. Все, что string-manipulation вам нужно сделать, это ввести cpp новую строку поверх basic_string
и предоставить cxx ей свой собственный char_traits
, который string сравнивает нечувствительность empty-string к регистру. / 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
Сравнение строк без учета регистра в C++
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.