如何在C++ 11中将u32string转换为int?

Woj*_*ilo 7 c++ string localization type-conversion c++11

我们如何可以转换u32stringint在C++ 11?

另外,我应该使用什么方法将部分字符串转换为int- 让我们说开始和结束迭代器可用?

我试过了:

u32string test=U"14";
cout << atoi(test.c_str());
Run Code Online (Sandbox Code Playgroud)

但它抛出:

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

bam*_*s53 6

#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));
}
Run Code Online (Sandbox Code Playgroud)

这取决于UTF-8和使用相同数字表示的"C"语言环境.


GCC的标准库实现libstdc ++还没有包含codecvt头或std :: wstring_convert.libc ++确实包含了这两个,Visual Studio的标准库实现也是如此.如果你必须使用libstdc ++,你可能会发现自己实现一个简单的转换函数是最容易的.

#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)); }
Run Code Online (Sandbox Code Playgroud)