gpt4 book ai didi

C++ tolower 特殊字符,如 ü

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:14:59 25 4
gpt4 key购买 nike

我在使用 C++ 中的 tolower() 函数将字符串转换为小写时遇到问题。对于普通字符串,它按预期工作,但特殊字符未成功转换。

我如何使用我的函数:

string NotLowerCase = "Grüßen";
string LowerCase = "";
for (unsigned int i = 0; i < NotLowerCase.length(); i++) {
LowerCase += tolower(NotLowerCase[i]);
}

例如:

  1. 测试 -> 测试
  2. 测试 2 -> 测试 2
  3. Grüßen -> gr????en
  4. (§) -> ()

如您所见,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';
}

您也可以更改 std::stringstd::wstring这是许多 C++ 实现上的 Unicode。

wstring NotLowerCase = L"Grüßen";
wstring LowerCase;
for (auto&& ch : NotLowerCase) {
LowerCase += towlower(ch);
}

Microsoft 的指导是“Normalize strings to uppercase”,因此您可以使用 toupper towupper 相反。

请记住,逐个字符的转换可能不适用于某些语言。例如,使用德国人所说的德语,将 Grüßen 全部大写变成 GRÜESSEN (尽管现在有一个 capital )。还有许多其他“问题”,例如组合字符;如果您正在使用字符串进行真正的“生产”工作,那么您确实需要一种完全不同的方法。

最后,C++ 对管理语言环境有更复杂的支持,参见 <locale> 了解详情。

关于C++ tolower 特殊字符,如 ü,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42791433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com