c++中遍历字符串中文乱码
时间: 2024-04-19 12:06:48 浏览: 96
在 C++ 中,如果字符串中包含中文字符,需要使用宽字符类型 `wchar_t` 或者多字节字符类型 `char` 来存储。在遍历字符串时,需要注意编码格式,避免出现乱码。
以下是一个遍历宽字符类型字符串的例子:
```
#include <iostream>
#include <locale>
#include <codecvt>
int main() {
std::wstring str = L"你好,世界!";
std::locale loc("zh_CN.UTF-8");
std::wcout.imbue(loc);
std::wcout << str << std::endl;
for (auto c : str) {
std::wcout << c << std::endl;
}
return 0;
}
```
以上代码使用了 UTF-8 编码格式,可以正确输出中文字符。在遍历字符串时,使用 `auto` 关键字可以自动推断字符类型。注意,输出字符时需要使用 `std::wcout` 输出流。
如果使用的是多字节字符类型字符串,可以使用 `std::wstring_convert` 类进行转换:
```
#include <iostream>
#include <locale>
#include <codecvt>
#include <string>
int main() {
std::string str = "你好,世界!";
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::wstring wstr = converter.from_bytes(str);
std::locale loc("zh_CN.UTF-8");
std::wcout.imbue(loc);
std::wcout << wstr << std::endl;
for (auto c : wstr) {
std::wcout << c << std::endl;
}
return 0;
}
```
以上代码将多字节字符类型字符串转换为宽字符类型字符串,并且使用了 UTF-8 编码格式。在遍历字符串时,使用 `auto` 关键字可以自动推断字符类型。注意,输出字符时需要使用 `std::wcout` 输出流。
阅读全文