将wstring转换为小写

msi*_*ing 4 c++ string utf-16

我想转换wstring成小写.我发现使用区域设置信息有很多答案.有没有像任何功能ToLower()wstring也?

Col*_*lin 7

std::towlower是你想要的功能,来自<cwtype>.此标头包含许多用于处理宽字符串的函数.

例:

// Convert wstring to upper case
wstring wstrTest = L"I am a STL wstring";
transform(
  wstrTest.begin(), wstrTest.end(),
  wstrTest.begin(),
  towlower);
Run Code Online (Sandbox Code Playgroud)

  • `&lt;cwtype&gt;` 对我不起作用,但 `&lt;cwctype&gt;` 有效。 (2认同)

Kon*_*los 7

希望有帮助。

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Lowercase of the string 'THIS TEXT!' is 'this text!'
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是错误的,而且极其危险。在 chars (!) 上使用 ::tolower 已经很危险了,在 wchars 上它只会导致崩溃。如果传递给 ::tolower 的字符值不能表示为 unsigned char 并且不等于 EOF,则行为未定义。这是因为实现可以使用大小为 [256] 的查找表。如果你向那里传递任何大于 255 的值(就像 wchars 一样),它可能会崩溃。 (11认同)