如何在C ++ 11中将u32string转换为int? [英] How to convert u32string to int in C++11?

查看:453
本文介绍了如何在C ++ 11中将u32string转换为int?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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

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

我尝试过:

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

但是它抛出:

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

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

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

GCC的标准库实现libstdc ++尚未包含codecvt标头或std :: wstring_convert. libc ++确实包括这两个方面,Visual Studio的标准库实现也是如此.如果必须使用libstdc ++,则可能会发现自己自己实现一个简单的转换函数最简单.

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

这篇关于如何在C ++ 11中将u32string转换为int?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆