需要包含头文件

#include <string>

数值类型转成string类型:

string to_string(int val);

string to_string(unsigned val);

string to_string(long val);

string to_string(unsigned long val);

string to_string(long long val);

string to_string(unsigned long long val);

string to_string(float val);

string to_string(double val);

string to_string(long double val);

string类型转成数值类型:

int stoi(const string& str, size_t *pos=0, int base=10);

long stol(const string& str, size_t *pos=0, int base=10);

unsigned long stoul(const string& str, size_t *pos=0, int base=10);

long long stoll(const string& str, size_t *pos=0, int base=10);

unsigned long long stoull(const string& str, size_t *pos=0, int base=10);

float stof(const string& str, size_t *pos=0);

double stod(const string& str, size_t *pos=0);

long double stold(const string& str, size_t *pos=0);

这些函数忽略str开头的空白,pos参数保存已处理的字符个数,如果是nullptr则忽略,base参数为数的底,进制数,默认为10。

比如

const std::string str = " 123$ is enough";
size_t pos = ;
int num = std::stoi(str, &pos, );
std::cout << str.c_str() + pos << std::endl;

将输出 $ is enough ,num值为123,pos值为4。

C++17添加了更高效的数值和字符串转换函数,在头文件<charconv>中,这些函数内部没有内存申请开销,和区域无关(locale-independent)。

整形类型转成字符串:

to_chars_result  to_chars(char* first, char* last, IntegerT value, int base = 10);

此函数为模版函数,IntegerT为整形类型或char类型,first, last为调用者提供的用于存储转换结果的连续内存区间。

函数返回类型为

struct to_chars_result {
char* ptr;
errc ec; //type: enum class errc
};

如果转换成功的话,ptr为最后一个写入字符的下一个字符的地址,ec值等于std::errc()。转换不成功的话,ptr值为last。

例子:

std::string strNum(, ' ');
auto [ptr, ec] = std::to_chars(strNum.data(), strNum.data() + strNum.size(), ); if (ec == std::errc())
{
//successful
std::cout << strNum << std::endl;
}
else
{
//failed
}
auto [ptr, ec]为C++17中的结构化绑定用法,转换后strNum值为"123",ptr值为strNum.data() + 3。

浮点数转成字符串:

to_chars_result to_chars(char* first, char* last, FloatT value);
to_chars_result to_chars(char* first, char* last, FloatT value, chars_format format);
to_chars_result to_chars(char* first, char* last, FloatT value, chars_format format, int precision);

FloatT可以是 float, double, 或 long double 类型,format 类型为 chars_format ,可以是下列值的组合,默认值为 chars_format::general。

enum class chars_format {
scientific, // Style: (-)d.ddde±dd
fixed, // Style: (-)ddd.ddd
hex, // Style: (-)h.hhhp±d (Note: no 0x!)
general = fixed | scientific
};

字符串转为数值类型:

from_chars_result from_chars(const char* first, const char* last, IntegerT& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, FloatT& value, chars_format format = chars_format::general);

first, last为被转换的字符串的开始和结束地址,IntegerT为整形类型,FloatT为浮点数类型。

from_chars_result 类型为:

struct from_chars_result {
const char* ptr;
errc ec;
};

转换成功的话ec值等于std::errc(),ptr 值为第一个不能被转换字符的地址,如果字符串都能被转换的话,ptr 值为 last.

如果是字符串表示的实际值超出 IntegerT 或 FloatT 的区间,ec值为 std::errc::result_out_of_range。

如果转换失败,ec值为 std::errc::invalid_argument, ptr 值为 first。

另外注意:from_chars 不会跳过字符串开头的空白。

 

 

C++标准库里自带的数值类型和字符串互相转换函数的更多相关文章

  1. C++异常之七 标准库里的异常类

    标准库里的异常类 C++标准提供了一组标准异常类,这些类以基类 Exception 开始,标准程序库抛出的所有异常,都派生于该基类,这些类构成如图所示的异常类的派生继承关系,该基类提供一个成员函数 w ...

  2. c++11 数值类型和字符串的相互转换

    string和数值类型转换 c++11提供了to_string方法,可以方便的将各种数值类型转换为 字符串类型: std::string to_string(int value); std::stri ...

  3. C#DateTime.ToString 格式化时间字符串和数值类型转换为字符串

    我们经常会遇到对时间进行转换,达到不同的显示效果,默认格式为:2006-6-6 14:33:34,如果要换成200606,06-2006,2006-6-6或更多的格式该怎么办呢?这里将要用到:Date ...

  4. [并发并行]_[C/C++]_[C++标准库里的线程安全问题]

    场景 1.写普通的程序时, 经常会使用cout来做输出, 每个进程只有一个控制台, 如果多线程调用cout时会出状况吗? 2.之所以研究cout会不会在并发下调用有问题, 是因为曾经有一个bug的崩溃 ...

  5. C#中货币类型和数值类型、字符串类型的转化

    1.定义textbox的数据 private void Form1_Load(object sender, EventArgs e) { this.textBox1.Text = String.For ...

  6. 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流

    最初的步骤 Python是大小写敏感的 任何在#符号右面的内容都是注释 >>> help('print')在“print”上使用引号,那样Python就可以理解我是希望获取关于“pr ...

  7. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

  8. 16.C++-初探标准库

    在别人代码里,经常看到std命名空间,比如使用std命名空间里的标准输入输出流对象cout: #include<iostream> using namespace std; int mai ...

  9. Python标准库映射类型与可散列数据类型的关系

    这里有两个概念似懂非懂,在这里明确一下: 映射类型: Python>3.2中,collections.abc模块有Mapping和MutableMapping两个抽象基类(Python2.6~3 ...

随机推荐

  1. CardView 简介和使用

    CardView 简介 本文链接:https://blog.csdn.net/ShawnXiaFei/article/details/81568537CardView 是 Google 官方发布 MD ...

  2. python数据可视化:pyecharts

    发现了一个做数据可视化非常好的库:pyecharts.非常便捷好用,大力推荐!! 官方介绍:pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 ...

  3. 源码安装LNMP

    需要准备的安装包以及下载地址(只是一个大概地址,版本和下载方式需要自行选择): Nginx http://nginx.org/en/download.html nginx主程序包 MySQL http ...

  4. Mysql的安全配置向导命令mysql_secure_installation

    mysql_secure_installation安全配置向导 [root@youxi1 ~]# mysql_secure_installation Securing the MySQL server ...

  5. PostgreSQL创建database默认编码为UTF-8

    在psql中执行如下代码: create database logdb encoding='UTF8';

  6. ubuntu16.04 TLS安装java

    apt-get install software-properties-commonadd-apt-repository ppa:webupd8team/javaapt-get updateapt-g ...

  7. Andrew Ng机器学习课程14(补)

    Andrew Ng机器学习课程14(补) 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 利用EM对factor analysis进行的推导还是要参看我的上一 ...

  8. JavaScript中的Truthy和Falsy

    JavaScript中存在Truthy值和Falsy值的概念 — 除了boolean值true.false外,所有类型的JavaScript值均可用于逻辑判断,其规则如下: 1.所有的Falsy值,当 ...

  9. SourceTree使用图解

    看完这篇文档你能做到的是: 1.简单的用Git管理项目. 2.怎样既要开发又要处理发布出去的版本bug情况. SourceTree是一个免费的Git图形化管理工具,mac下也可以安装. 下载地址:ht ...

  10. 3、2 elaticSearch 客户端head 下载

    注意版本,我们建议使用低版本5.6.8 1. 下载head插件:https://github.com/mobz/elasticsearch-head 2.解压到任意目录,但是要和elasticsear ...