Я хочу преобразовать wstring
в нижний регистр. Я обнаружил, что есть много ответов, использующих локальную информацию. Есть ли какая-либо функция, например, ToLower()
для wstring
?Преобразование wstring в нижний регистр
ответ
std::towlower
- это функция, которую вы хотите, от <cwtype>
. Этот заголовок содержит много функций для работы с широкими строками.
Пример:
// Convert wstring to upper case
wstring wstrTest = L"I am a STL wstring";
transform(
wstrTest.begin(), wstrTest.end(),
wstrTest.begin(),
towlower);
Я не думаю, что это может корректно работать с кодовыми точками, которые охватывают несколько блоков кода. – user2079303
@ user2079303 C++ (и C здесь) требует, чтобы любая поддерживаемая кодовая точка помещалась в wchar_t. Другими словами, это только проблема Windows. (Реальная проблема заключается в том, что отображение кода не является 1: 1 в кодовых точках и зависит от контекста, как отмечено в других комментариях) – Cubbi
@Cubbi Проблемы с Windows - проблема для большинства кроссплатформенных программ :) Но да, это действительно не единственная причина, по которой трансформация одного блока кода за раз не может работать. Алгоритм отображения должен иметь дело со строками в целом, чтобы работать правильно. – user2079303
Надежда, что помогает ..
#include <iostream>
#include <algorithm>
int main()
{
std::wstring str = L"THIS TEXT!";
std::wcout << "Lowercase of the string '" << str << "' is ";
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
std::wcout << "'" << str << "'\n";
return 0;
}
Выход:
Lowercase of the string 'THIS TEXT!' is 'this text!'
Отлично работает с этим методом ta – Epirocks
http://en.cppreference.com/w/cpp/string/wide/towlower –
Обратите внимание, что «нижний регистр» является неотъемлемой спецификой для локали. В Турции 'towlower ('I'L)! =' I'L' (результат на самом деле' 'ı'') –
На самом деле преобразования случаев - это кошмар. Как отмечено в ссылке, нижний регистр «Σ» является либо «σ», либо «ς» в зависимости от позиции в слове, а нижний регистр «SS» на немецком языке является либо «ß», либо «ss» - в зависимости от слова (" MASSE "может быть либо" Maße ", либо" masse "в зависимости от того, какой он является!). См. Http://unicode.org/faq/casemap_charprop.html для получения дополнительных сведений о gory. –