TVA*_*ren 5 c++ character-encoding htmlspecialchars
我无法使用C++中的tolower()函数将字符串转换为小写.使用普通字符串时,它会按预期工作,但不会成功转换特殊字符.
我如何使用我的功能:
string NotLowerCase = "Grüßen";
string LowerCase = "";
for (unsigned int i = 0; i < NotLowerCase.length(); i++) {
LowerCase += tolower(NotLowerCase[i]);
}
Run Code Online (Sandbox Code Playgroud)
例如:
你可以看到,3和4没有按预期工作
我该如何解决这个问题?我必须保留特殊字符,但是小写.
示例代码(如下)tolower显示了如何解决此问题; 你必须使用默认的"C"语言环境以外的东西.
#include <iostream>
#include <cctype>
#include <clocale>
int main()
{
unsigned char c = '\xb4'; // the character Ž in ISO-8859-15
// but ´ (acute accent) in ISO-8859-1
std::setlocale(LC_ALL, "en_US.iso88591");
std::cout << std::hex << std::showbase;
std::cout << "in iso8859-1, tolower('0xb4') gives "
<< std::tolower(c) << '\n';
std::setlocale(LC_ALL, "en_US.iso885915");
std::cout << "in iso8859-15, tolower('0xb4') gives "
<< std::tolower(c) << '\n';
}
Run Code Online (Sandbox Code Playgroud)
您也可以更改std::string到std::wstring它是Unicode许多C++实现.
wstring NotLowerCase = L"Grüßen";
wstring LowerCase;
for (auto&& ch : NotLowerCase) {
LowerCase += towlower(ch);
}
Run Code Online (Sandbox Code Playgroud)
Microsoft的指导是"将字符串规范化为大写 ",因此您可以使用toupper或towupper替代.
请记住,逐字符转换可能不适用于某些语言.例如,在德国使用德语,使Grüßen全部为大写,将其转化为GRÜESSEN(尽管现在有一个资本ẞ).还有许多其他"问题",如组合字符; 如果你正在用字符串进行真正的"生产"工作,你真的想要一种完全不同的方法.
最后,C++对管理语言环境有更复杂的支持,详见<locale>详见.
| 归档时间: |
|
| 查看次数: |
2875 次 |
| 最近记录: |