gpt4 book ai didi

C++ 字符串小写与自定义语言环境

转载 作者:可可西里 更新时间:2023-11-01 17:57:25 30 4
gpt4 key购买 nike

我一直在尝试使用不同的语言环境调用 std::tolower(),但似乎出了点问题。我的代码如下:

int main() {
std::locale::global(std::locale("es_ES.UTF-8"));
std::thread(&function, this); // Repeated some times
// wait for threads
}

void function() {
std::string word = "HeÉllO";
std::transform(word.begin(), word.end(), word.begin(), cToLower);
}

int cToLower(int c) {
return std::tolower(c, std::locale());
}

所以当我尝试执行这个程序时,我得到:

terminate called after throwing an instance of 'std::bad_cast'
terminate called recursively
what(): std::bad_cast
Aborted (core dumped)

尽管执行 return std::tolower(c); 工作正常,但它只是将“标准”字符转换为小写字符,而不是 É

我有一些线程同时执行相同的功能,使用 C++11 并使用 g++ 编译(以防它与它有关)。

我想知道这是否是实现我想做的事情的正确方法,还是有其他方法。

谢谢!

最佳答案

不同于tolower的版本来自 C(将字符转换为 unsigned char 然后转换为 int ),<locale> tolower 的版本意味着直接用字符调用。它被定义为使用 std::ctype<charT>语言环境的方面,以及仅有的两个 std::ctype专业guaranteed to be availablestd::ctype<char>std::ctype<wchar_t> .因此:

char cToLower(char c) {
return std::tolower(c, std::locale());
}

请注意,这仍然是一个 char -by- char转换;如果字符占用超过一个字节,则不太可能正确处理。

关于C++ 字符串小写与自定义语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42470012/

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