Нечувствительное к строкам сравнение строк C ++

Я знаю, что есть способы сделать сравнение игнорирования case, которое включает итерацию по строкам или один хороший на SO, нуждается в другой библиотеке. Мне нужно поместить это на другие компьютеры, которые, возможно, не были установлены. Есть ли способ использовать стандартные библиотеки для этого? Прямо сейчас я просто делаю …

if (foo == "Bar" || foo == "bar") { cout << "foo is bar" << endl; } else if (foo == "Stack Overflow" || foo == "stack Overflow" || foo == "Stack overflow" || foo == "etc.") { cout << "I am too lazy to do the whole thing..." << endl; } 

Это может значительно улучшить читаемость и удобство использования моего кода. Спасибо, что прочитали это далеко.

strncasecmp

Функция strcasecmp() выполняет побайтное сравнение строк s1 и s2 , игнорируя случай символов. Он возвращает целое число меньше, равное или больше нуля, если s1 найдено соответственно, чтобы быть меньше, соответствовать или быть больше, чем s2 .

Функция strncasecmp() аналогична, за исключением того, что она сравнивает не более n байтов s1 и s2

обычно то, что я делаю, просто сравнивает версию с нижней строкой строки, о которой идет речь, например:

 if (foo.make_this_lowercase_somehow() == "stack overflow") { // be happy } 

Я считаю, что boost имеет встроенные преобразования в нижнем регистре, поэтому:

 #include  if (boost::algorithm::to_lower(str) == "stack overflow") { //happy time } 

почему бы вам не сделать все в нижнем регистре, а потом сравнить?

понижать()

  int counter = 0; char str[]="HeLlO wOrLd.\n"; char c; while (str[counter]) { c = str[counter]; str[counter] = tolower(c); counter++; } printf("%s\n", str); 

Вы можете написать простую функцию для преобразования существующей строки в нижний регистр следующим образом:

 #include  #include  #include  #include  #include  std::string make_lowercase( const std::string& in ) { std::string out; std::transform( in.begin(), in.end(), std::back_inserter( out ), ::tolower ); return out; } int main() { if( make_lowercase( "Hello, World!" ) == std::string( "hello, world!" ) ) { std::cout << "match found" << std::endl; } return 0; } 

Я просто написал это, может быть, это может быть полезно кому-то:

 int charDiff(char c1, char c2) { if ( tolower(c1) < tolower(c2) ) return -1; if ( tolower(c1) == tolower(c2) ) return 0; return 1; } int stringCompare(const string& str1, const string& str2) { int diff = 0; int size = std::min(str1.size(), str2.size()); for (size_t idx = 0; idx < size && diff == 0; ++idx) { diff += charDiff(str1[idx], str2[idx]); } if ( diff != 0 ) return diff; if ( str2.length() == str1.length() ) return 0; if ( str2.length() > str1.length() ) return 1; return -1; } 
  • std :: unique_ptr с неполным типом не будет компилироваться
  • Как узнать, работает ли мой процесс в качестве администратора?
  • удаление пустого серого пространства в datagrid в c #
  • Сроки выполнения CUDA
  • Выборочно отключить предупреждения GCC только для части единицы перевода?
  • Как определить, на какой платформе компилируется исполняемый файл?
  • std :: пара ссылок
  • Получить значение открытого статического поля через reflection
  • Лётная загрузка против желаемой загрузки
  • Как проверить, закрыто ли соединение TcpClient?
  • Имеют ли переменные захвата lambdas c ++ 11, которые они не используют?
  • Interesting Posts

    Как запустить сценарий оболочки в OS X двойным щелчком?

    Выйти из tmux-сервера и завершить все запущенные процессы

    Как я могу исправить ошибку MySQL # 1064?

    Есть ли преимущество производительности в том, что мой жесткий диск разбит на разделы?

    LINQ эквивалент foreach для IEnumerable

    Можно ли «мгновенно» создавать произвольные файлы?

    Как переименовать файлы в пакете с помощью счетчика?

    Как разбить .zip-файл на несколько сегментов?

    Как получить PID процесса, который я только начал в java-программе?

    Импортирование узлов node_modules в Angular2 и TypeScript

    Как добавить Stacktrace или вариант отладки при создании проекта Android Studio

    Существует ли средство шифрования томов системы Windows 7, позволяющее удаленную разблокировку через ssh во время фазы загрузки?

    Использование шаблона проектирования Singleton для SQLiteDatabase

    Установка приоритета для streamов Java

    Dell Vostro 1000 с новой установкой XP Pro работает очень медленно

    Давайте будем гением компьютера.