2017-02-03 83 views
2

我想将wstring转换为小写。我发现使用语言环境信息有很多答案。 wstring也有类似ToLower()的功能吗?将wstring转换为小写

+2

http://en.cppreference.com/w/cpp/string/wide/towlower –

+0

请注意,“小写”是本地特定于语言环境的操作。在土耳其,'拖'('I'L)!='i'L'(结果实际上是''') –

+1

事实上,案例转换是一场噩梦。如链接所述,根据单词中的位置,小写字母'Σ'是'σ'和'ς',德语中的小写字母“SS”是“ß”或“ss” - 取决于单词(“ MASSE“可以是”Maße“或”masse“,取决于它是哪一个单形图!)。更多细节请参见http://unicode.org/faq/casemap_charprop.html。 –

回答

3

std::towlower是你想要的功能,从<cwtype>。这个头文件包含很多处理宽字符串的函数。

实施例:

// Convert wstring to upper case 
wstring wstrTest = L"I am a STL wstring"; 
transform(
    wstrTest.begin(), wstrTest.end(), 
    wstrTest.begin(), 
    towlower); 
+1

我不认为这可以跨越多个代码单元的代码点正常工作。 – user2079303

+0

@ user2079303 C++(和C在这里)要求任何支持的代码点都适合wchar_t。换句话说,这只是Windows上的一个问题。 (真正的问题在于,代码点中的案例映射不是1:1,并且与上下文相关,如其他评论所述) – Cubbi

+0

@Cubbi窗口问题对大多数跨平台程序来说都是一个问题:)但是,的确如此不是一次转换一个代码单元无法工作的唯一原因。映射算法必须处理字符串作为一个整体才能正常工作。 – user2079303

1

希望帮助..

#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!' 
+0

与这种方法ta很好地合作 – Epirocks