博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
atoi、stoi、strtoi区别
阅读量:4168 次
发布时间:2019-05-26

本文共 1275 字,大约阅读时间需要 4 分钟。

首先atoi和strtol都是c里面的函数,他们都可以将字符串转为int,它们的参数都是const char*,因此在用string时,必须调c_str()方法将其转为char*的字符串。或者atof,strtod将字符串转为double,它们都从字符串开始寻找数字或者正负号或者小数点,然后遇到非法字符终止,不会报异常:

int main() {    using namespace std;    string strnum=" 232s3112";    int num1=atoi(strnum.c_str());    long int num2=strtol(strnum.c_str(),nullptr,10);    cout<<"atoi的结果为:"<
<

输出结果为:

atoi的结果为:232
strtol的结果为:232

可以看到,程序在最开始遇到空格跳过,然后遇到了字符's'终止,最后返回了232。

这里要补充的是strtol的第三个参数base的含义是当前字符串中的数字是什么进制,而atoi则只能识别十进制的。例如:

using namespace std;    string strnum="0XDEADbeE";    int num1=atoi(strnum.c_str());    long int num2=strtol(strnum.c_str(),nullptr,16);    cout<<"atoi的结果为:"<
<

输出结果为:

atoi的结果为:0strtol的结果为:233495534

另外可以注意到的是,如果转换失败,这两个函数不会报错,而是返回0。

但是对于stoi就不是这样了,atoi是string库中的函数,他的参数是string。

int main() {    using namespace std;    string strnum="XDEADbeE";    int num1=atoi(strnum.c_str());    int num2=stoi(strnum);    cout<<"atoi的结果为:"<
<

程序会报错:

terminate called after throwing an instance of 'std::invalid_argument'  what():  stoi

我们把stoi注释掉再看:

int main() {    using namespace std;    string strnum="XDEADbeE";    int num1=atoi(strnum.c_str());    //int num2=stoi(strnum);    cout<<"atoi的结果为:"<
<

其结果为:

atoi的结果为:0

所以在使用时,需要根据实际情况来选择。

转载地址:http://pghxi.baihongyu.com/

你可能感兴趣的文章
Activity类中7个与活动生命周期回调有关的方法
查看>>
jwt与token+redis,哪种方案更好用?
查看>>
Comparator接口
查看>>
在二叉树中找到一个节点的后继节点
查看>>
寻找第K大
查看>>
String.trim
查看>>
缓存行 伪共享
查看>>
400 : perceived to be a client error 错误
查看>>
Establishing SSL connection without server's identity verification is not recommended
查看>>
扫描包不存在:pojo类找不到
查看>>
c语言中计算数组长度的方法
查看>>
java 数组定义
查看>>
java中的&和&&的区别
查看>>
Java的位运算符
查看>>
BufferedReader与Scanner的区别
查看>>
java String于常量池中的介绍
查看>>
java Text 错误: 找不到或无法加载主类 Text
查看>>
XShell连接ubantu:给ubantu安装ssh
查看>>
c语言的null和0
查看>>
二进制详解:世界上有10种人,一种懂二进制,一种不懂。
查看>>