strtoint stoi parse not error declared convert atol c++ string c++11 localization type-conversion

stoi - Cómo convertir u32string a int en C++ 11?



string c++ convert to int (2)

Editado porque mi primera respuesta fue estúpida.

Esto es lo que logré hacer, sin embargo, probablemente no sea muy eficiente, y asume que su cadena es válida.

#include <string> #include <iostream> int main() { std::u32string str = U"14"; std::string res; for (auto c = str.begin(); c != str.end(); ++c) { char t = *c; res.push_back(t); } std::cout << "/nVal = " << atoi(res.c_str()) << std::endl; return (0); }

¿Cómo podemos convertir u32string a int en C ++ 11?

Además, ¿qué método debo usar para convertir parte de dicha cadena en int - digamos tener iterador de inicio y final disponible?

He intentado:

u32string test=U"14"; cout << atoi(test.c_str());

pero arroja:

candidate function not viable: no known conversion from ''const char32_t *'' to ''const char *'' for 1st argument extern int atoi (__const char *__nptr)


#include <locale> // wstring_convert #include <codecvt> // codecvt_utf8 #include <iostream> // cout #include <string> // stoi and u32string int main() { std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> convert; std::u32string str = U"14"; std::cout << std::stoi(convert.to_bytes(str)); }

Esto depende de UTF-8 y la configuración regional "C" usando la misma representación para los dígitos.

La implementación de biblioteca estándar de GCC libstdc ++ aún no incluye el encabezado codecvt o std :: wstring_convert. libc ++ incluye ambos, al igual que la implementación de la biblioteca estándar de Visual Studio. Si tiene que usar libstdc ++, le resultará más fácil implementar simplemente una función de conversión simple.

#include <algorithm> // transform #include <iterator> // begin, end, and back_inserter std::string u32_to_ascii(std::u32string const &s) { std::string out; std::transform(begin(s), end(s), back_inserter(out), [](char32_t c) { return c < 128 ? static_cast<char>(c) : ''?''; }); return out; } int u32toi(std::u32string const &s) { return stoi(u32_to_ascii(s)); }