====wstring====
''wstring'' est surtout utile pour Windows car toutes les appels de fonctions finissant par ''W'' en ont besoin.
#include
#include
#include
std::wofstream out("file.txt", std::ios_base::out | std::ios_base::app);
const std::locale utf8_locale = std::locale(std::locale(), new std::codecvt_utf8());
out.imbue(utf8_locale);
// Verify that the file opened correctly
std::wstring s(L"contenu");
out << s << std::endl;
[[https://stackoverflow.com/questions/37395399/multiplatform-way-to-write-a-stdwstring-into-a-file-in-c|Multiplatform way to write a std::wstring into a file in C++]] {{ :lang:cpp:string:encoding_-_multiplatform_way_to_write_a_std_wstring_into_a_file_in_c_-_stack_overflow_2019-12-27_20_18_07_.html |Archive du 23/05/2016 le 27/12/2019}}
* Conversion entre string et wstring
Sous windows :
std::wstring s2ws(const std::string& s)
{
int slength = (int)s.length() + 1;
int len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
std::wstring r(len, L'\0');
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, &r[0], len);
return r;
}
std::string ws2s(const std::wstring& s)
{
int slength = (int)s.length() + 1;
int len = WideCharToMultiByte(CP_ACP, 0, s.c_str(), slength, 0, 0, 0, 0);
std::string r(len, '\0');
WideCharToMultiByte(CP_ACP, 0, s.c_str(), slength, &r[0], len, 0, 0);
return r;
}
[[https://codereview.stackexchange.com/questions/419/converting-between-stdwstring-and-stdstring|Converting between std::wstring and std::string]] {{ :lang:cpp:string:c_-_converting_between_std_wstring_and_std_string_-_code_review_stack_exchange_04_05_2023_14_44_33_.html |Archive du 29/01/2011 le 04/05/2023}}
====stringstream===
Le résultat ne va pas être le même si on donne à ''std::stringstream'' un ''int'' ou un ''char''.
ss << static_cast(1);
va donner ''\x1''.
ss << static_cast(1);
va donner ''1''.
====consteval avec std::string_view====
Ce n'est pas possible. Il faut travailler avec les ''char*''.
#include
#include
template
struct decayable_array : std::array {
constexpr operator const T*() const { return this->data(); }
};
template
consteval decayable_array reverse(const char (&arr)[N]) {
decayable_array data{};
for (std::size_t i = 0; i < N - 1; ++i) {
data[N - i - 2] = arr[i];
}
return data;
}
int main() { return strlen(reverse("abc")); }
main:
mov eax, 3
ret
[[https://godbolt.org/z/b4sY41Gbx|Exemple godbolt]]
====Split====
===string===
std::istringstream f("denmark;sweden;india;us");
std::string s;
while (getline(f, s, ';')) {
// Résultat dans s.
}
[[https://stackoverflow.com/questions/5167625/splitting-a-c-stdstring-using-tokens-e-g|Splitting a C++ std::string using tokens, e.g. “;”]] {{ :lang:cpp:string:splitting_a_c_std_string_using_tokens_e.g._-_stack_overflow_2019-12-27_20_18_56_.html |Archive du 02/03/2011 le 27/12/2019}}
===string_view===
std::vector
splitSV(std::string_view strv, std::string_view delims = " ")
{
std::vector output;
size_t first = 0;
while (first < strv.size())
{
const auto second = strv.find_first_of(delims, first);
if (first != second)
output.emplace_back(strv.substr(first, second-first));
if (second == std::string_view::npos)
break;
first = second + 1;
}
return output;
}
[[https://www.bfilipek.com/2018/07/string-view-perf-followup.html|Speeding Up string_view String Split Implementation]] {{ :lang:cpp:string:bartek_s_coding_blog_speeding_up_string_view_string_split_implementation_2019-12-27_20_19_05_.html |Archive du 30/07/2018 le 27/12/2019}}