How to convert u32string to int in C++11?

匿名 (未验证) 提交于 2019-12-03 03:06:01

问题:

How can we convert u32string to int in C++11?

Additional, what method should I use to convert part of such string to int - lets say having begin and end iterator available?

I've tried:

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

but it throws:

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

回答1:

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

This depends on UTF-8 and the "C" locale using the same representation for digits.


GCC's standard library implementation libstdc++ does not include the codecvt header or std::wstring_convert yet. libc++ does include both of these, as does Visual Studio's standard library implementation. If you have to use libstdc++ you may find it easiest to just implement a simple conversion function yourself.

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


回答2:

Edited because my first answer was stupid.

Here is what i managed to do, however its probably not very efficient, and it assumes your string is valid.

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!