作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用英文字符很容易提取,也就是说,从字符串中提取一个字符,例如,以下代码应该将 y 作为输出:
string my_word;
cout << my_word.at(1);
如果我尝试对希腊字符做同样的事情,我会得到一个有趣的字符:
string my_word = "λογος";
cout << my_word.at(1);
输出:
�
我的问题是:我该怎么做才能使 .at() 或任何类似的函数起作用?
非常感谢!
最佳答案
std::string
是一个窄字符序列 char
。但是在使用 utf-8 语言环境时,许多国家字母表使用一个以上的字符来编码单个字母。因此,当您使用 s.at(0)
时,您会得到整个字母的一半甚至更少。您应该使用宽字符:std::wstring
而不是 std::string
,std::wcout
而不是 std::cout
和 L"λογος"
作为字符串文字。
此外,您应该在使用 std::locale
进行任何打印之前设置正确的语言环境。
此案例的代码示例:
#include <iostream>
#include <string>
#include <locale>
int main(int, char**) {
std::locale::global(std::locale("en_US.utf8"));
std::wcout.imbue(std::locale());
std::wstring s = L"λογος";
std::wcout << s.at(0) << std::endl;
return 0;
}
关于C++ 希腊字符字符串和 .at() 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46500419/
我是一名优秀的程序员,十分优秀!