Masalah:
Bagaimana cara menukar rentetan wstring kepada rentetan dalam C ?
Konteks:
Dalam C , wstring dan rentetan mewakili rentetan aksara lebar dan rentetan aksara sempit, masing-masing. Penukaran antara dua jenis ini mungkin diperlukan dalam pelbagai senario.
Percubaan Asal:
#include <string> #include <iostream> int main() { std::wstring ws = L"Hello"; std::string s(ws.begin(), ws.end()); std::cout << "std::string = " << s << std::endl; std::wcout << "std::wstring = " << ws << std::endl; }
Isu:
Contoh yang disediakan hanya mengeluarkan nilai wstring awal, bukan rentetan penukaran.
Penyelesaian menggunakan std::wstring_convert:
C 11 memperkenalkan std::wstring_convert, yang memudahkan proses penukaran:
#include <locale> #include <codecvt> int main() { std::wstring ws = L"Hello"; // Setup converter using convert_type = std::codecvt_utf8<wchar_t>; std::wstring_convert<convert_type, wchar_t> converter; // Convert wstring to string std::string s = converter.to_bytes(ws); std::cout << "std::string = " << s << std::endl; std::wcout << "std::wstring = " << ws << std::endl; }
Satu pelapik Penyelesaian:
std::wstring str = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes("some string");
Penyelesaian Fungsi Pembungkus:
std::wstring s2ws(const std::string& str) { using convert_typeX = std::codecvt_utf8<wchar_t>; std::wstring_convert<convert_typeX, wchar_t> converterX; return converterX.from_bytes(str); } std::string ws2s(const std::wstring& wstr) { using convert_typeX = std::codecvt_utf8<wchar_t>; std::wstring_convert<convert_typeX, wchar_t> converterX; return converterX.to_bytes(wstr); }
Atas ialah kandungan terperinci Bagaimana dengan Cekap Menukar `wstring` kepada `string` dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!