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)); }