C++ C+中的反向wstring+;
我需要把电话倒过来。我有这样的代码:C++ C+中的反向wstring+;,c++,utf-8,locale,C++,Utf 8,Locale,我需要把电话倒过来。我有这样的代码: #include <iostream> #include <string> #include <locale> int main() { std::wstring s; std::getline(std::wcin, s); for (const auto &i : s) { std::wcout << (int) i << " "; }
#include <iostream>
#include <string>
#include <locale>
int main() {
std::wstring s;
std::getline(std::wcin, s);
for (const auto &i : s) {
std::wcout << (int) i << " ";
}
std::wcout << std::endl;
std::wcout << s << std::endl;
std::reverse(s.begin(), s.end());
std::wcout << s << std::endl;
return 0;
}
但当我输入编码超过1字节的西里尔文文本时,我会得到这样的输出:
echo -n "папа" | ./reverse
208 191 208 176 208 191 208 176
папа
�пап�
我怎样才能正确地反转那个字符串
另外,我正在使用OS X。您的系统OS X使用UTF-8。因此,您没有理由使用
wstring
或wchar\u t
。事实上,这就是困惑的根源
您可以看到,在OSX上使用wstring
调用getline()
时,它根本不读取宽字符。这些字符实际上每个有四个字节,但它们所包含的值的范围与使用常规“窄”字符串时所包含的值的范围相同。所以当你把你的西里尔字符用程序连接起来时,你就得到了一个长度为8的关于你的问题的一位评论者正确地指出了这个问题:-这是你真正需要的,一旦你意识到你根本没有处理宽字符串。如果编码是utf-8,那么为什么要使用宽字符类型?@user207933 with
std::string
我得到这样的输出:-48-65-48-80-48-65-48-80-48-48-80�пап�代码>是的,我并没有暗示这是你的问题,只是一种困惑。你在网站上看到答案了吗?
echo -n "папа" | ./reverse
208 191 208 176 208 191 208 176
папа
�пап�