c++ string 和int 转换

说真的,这个字符串处理始终是基本功,而字符串和整数之间的转换,可谓屡屡出现,使用频率很高的。最近,经常用到,但是,偶尔也会忘记。所以,在这里,记下来和大家分享一下。

既然是C++,那么讲究的是高效,C++特性的转换。下面是C++的方法:

一、C++高效安全方法(简单好用)

1、sstream 头文件中 数字和字符串的互相转换

stringstream 智能类
因为stringstream的构造和析构比较耗费资源,所以经常重复使用一个
注意,下次使用的时候,调用clear()方法清除所有错误标志位

2、std::to_string() 数字转字符串

此外,还总结一波儿C语言中会用到的,当然C++也可以使用的方法

代码使用范例如下:

#include 
#include 

using namespace std;

int main(int argc, char *argv[])
{
   
    //1、strstream
    int ns = 12;
    stringstream stream;
    string strs;
    stream << ns;

    stream >> strs;
    cout << "strs:" << strs << endl;

    stream.clear();
    int ms = 0;
    stream << strs;
    stream >> ms;
    cout << "ms:" << ms << endl;
    //2.std::to_string
    cout << std::to_string(ms) << endl;
    return 0;
}

二、经典C语言:字符串和数字之间的转换

stdlib.h  cstdlib 引入标准库文件

字符串转数字

1、atoi 将字符串转换成整型数

int atoi(char *nptr)
atoi会扫描参数 nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始转换,
而再遇到非数字或字符串结束时才结束转换,并将结果返回。

2、atol 将字符串转换成长整数

long atol(char *nptr)
说明:同atoi

3、atof 将字符串转换成浮点数

double atof(const char * nptr)
参数nptr 字符串可包含正负号、小数点或E(e)来表示指数部分,例如123.456或123e-2
数字转字符串

4、strtol 将字符串转换成长整数

long strtol(char *nptr, char **endptr, int base)
参数endptr 如果不为NULL,则会遇到不符合号条件而终止的nptr中的字符指针由endptr返回
参数base代表采用的进制方式,如base值为10,则采用10进制

类似的用法,strtoul 将字符串转换成无符号长整形数
unsigned long strtoul(char * nptr, char ** endptr, int base)
其用法参照strtol函数

数字转字符串

1、 itoa 整数int转字符串

char *itoa(int number,char *nptr,int radix)
参数radix是转换进制数,可以为2、8、10、16等
但是请注意,itoa并是一个非标准的C/C++函数,它是Windows持有的,如果要写跨平台的程序,
请用sprintf。

2、 sprintf

int sprintf (char *nptr, const char *format, ...)
常用的format 有: %d 十进制有符号整数; %u十进制无符号整数
%o 八进制无符号整数;   %x或%X 十六进制无符号整数
%f 小数形式输出单、双精度浮点数; %lf 小数形式输出双精度浮点数
%e 或 %E 指数形式输出单、双精度浮点数
%g 或 %G 自动旋转%f或%e输出所占列数较小的一种输出单、双精度浮点数
【附加格式】
字母l 长整型,可加在格式符d、u、o、x之前
字符h 短整形,可加在格式符d、u、o、x之前
正整数m  右对齐,实际长度大于m时,按实际位数输出
负整数m  左对齐,实际长度大于m是,按实际位数输出
小数点(.)+正整数n  输出n位小数,第n+1位四舍五入
#include 
#include 

using namespace std;

int main(int argc, char *argv[])
{
    //1. atoi
    char *nptr = "123.99abc123";
    int n = atoi(nptr);
    cout << "n:" << n << endl;
    //2.atol
    int m = atol(nptr);
    cout << "m:" << m << endl;
    //2 strtol
    char * endptr;
    int _m = strtol(nptr,&(endptr),10);
    cout << "_m(strtol):" << _m << endl;
    //3.atof
    double d = atof(nptr);
    cout << "d:" << d << endl;
    //4.itoa
    char xptr[100];
    itoa(m,xptr,4);
    cout << xptr << endl;
    char yptr[100];
    //5.sprintf
    sprintf(yptr,"%d%d",n,m);
    cout << yptr << endl;
    return 0;
}

 

你可能感兴趣的:(C++)