atoi、stoi、strtoi区别
首先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,);
cout<<"atoi的结果为:"<<num1<<endl;
cout<<"strtol的结果为:"<<num2<<endl;
return ;
}
输出结果为:
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,);
cout<<"atoi的结果为:"<<num1<<endl;
cout<<"strtol的结果为:"<<num2<<endl;
return ;
输出结果为:
atoi的结果为:
strtol的结果为:
另外可以注意到的是,如果转换失败,这两个函数不会报错,而是返回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的结果为:"<<num1<<endl;
cout<<"stoi的结果为:"<<num2<<endl;
return ;
}
程序会报错:
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的结果为:"<<num1<<endl;
//cout<<"stoi的结果为:"<<num2<<endl;
return ;
}
其结果为:
atoi的结果为:
所以在使用时,需要根据实际情况来选择。
atoi、stoi、strtoi区别的更多相关文章
- c++的atoi和stoi一些区别
c++的atoi和stoi一些区别 对c++标准库中字符串转化为int的两个函数atoi()和stoi()两个有所混乱,特地研究了一下. stoi() 标准库的函数默认模板 int stoi (con ...
- LeetCode297. Serialize and Deserialize Binary Tree
题目 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据. 请设计一个算法来实 ...
- C/C++中字符串和数字互转小结
一. 数字 转 char*型 1.sprintf函数(适合C和C++) 示例: char str[50]; int num = 345; sprintf(str,"%d",num) ...
- 【持续更新】【pat】pat刷题技巧记录
修改code completion快捷键位CTRL+ENTER,帮助提示函数名称 修改命令行提示符的属性,开启快速编辑模式,方便调试 添加c++11语言标准支持 开启代码调试功能 对输入的字符串进行切 ...
- c语言字符处理函数常见使用集合
1.最近看一些开源项目代码时,总会看到 c 语言中一些 "str" 开头的处理字符串的用法,有的之前没用到过,特此记录,随时看到随时添加. 这里不提出源码,只是一些使用说明加例子 ...
- 【C++】atoi与stoi
stoi函数默认要求输入的参数字符串是符合int范围的[-2147483648, 2147483647],否则会runtime error.atoi函数则不做范围检查,若超过int范围,则显示-214 ...
- atoi和stoi
vs环境下:stoi函数默认要求输入的参数字符串是符合int范围的[-2147483648, 2147483647],否则会runtime error.atoi函数则不做范围检查,若超过int范围,则 ...
- atoi()和stoi()函数
C++的字符处理函数,把数字字符串转换成int输出 头文件都是#include<cstring> atoi()的参数是 const char* ,因此对于一个字符串str我们必须调用 c_ ...
- Loadrunner中web_find和web_reg_find函数的使用与区别
总结一下Loadrunner中的检查点函数,主要介绍两个函数:web_find()和web_reg_find():这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下:一.web_find( ...
随机推荐
- [译]36 Days of Web Testing(四)
Day 19: UX 用户体验 Why ? 最近UX变得越来越火,用户提现往往会直接联想到易用性和设计. 在我看来,UX不仅仅是这两点.UX, User Experience ,对我而言,不单单是产 ...
- 基于MVC模式的数据库综合练习
一.准备 没什么好说的,直接上代码.... 下面是web.xml <servlet> <servlet-name>list_user</servlet-name> ...
- .NET framework Chart组件SeriesChartType 枚举
成员名称 说明 Area 面积图类型. Bar 条形图类型. BoxPlot 盒须图类型. Bubble 气泡图类型. Candlestick K 线图类型. Column ...
- 纯CSS实现delay连续动画
从前css3还没出来的时候,用jquery的delay方法可以串起一个一个独立的动画片段. 那么在不使用jquery的平台上,如何借助css3来完成一些列动作呢? 有高人做了一个动感十足的人物动画: ...
- Delphi中禁止WebBrowser右键的方法
uses MSHtml; //在控件标签additional中找到TApplicationEvents控件,拖到窗体上.在TApplicationEvents的OnMessage事件中加入以下代码: ...
- 【HDOJ】1924 CIVIC DILL MIX
简单字符串. #include <cstdio> #include <cstring> #define MAXN 55 char srca[MAXN], cas[MAXN], ...
- 【HDOJ】1823 Luck and Love
二维线段树.wa了几次,不存在输出-1,而不再是一位小数. #include <cstdio> #include <cstring> #define MAXN 105 #def ...
- 【HDOJ】1881 毕业bg
01背包. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 1005 ty ...
- [LeetCode#260]Single Number III
Problem: Given an array of numbers nums, in which exactly two elements appear only once and all the ...
- 【转】 学习ios(必看经典)牛人40天精通iOS开发的学习方法【2015.12.2
原文网址:http://bbs.51cto.com/thread-1099956-1.html 亲爱的学员们: 如今,各路开发者为淘一桶金也纷纷转入iOS开发的行列.你心动了吗?想要行动吗?知道如何做 ...