相同点
- 都是C++的字符串处理函数,把数字字符串转换成int输出
- 头文件都是#include
不同点
- atoi()的参数是const char *,因此对于一个字符串str,我们必须调用c_str()方法,把string转换成const char *类型
- stoi()的参数是const string *,不需要转化为为const char *
- stoi()会做范围检查,默认范围在int的范围内,如果超出范围的话则会runtime error!
- atoi()不会做范围检查,如果超出范围的话,超出上界,则输出上界,超出下界,则输出下界(实际测试,超出上下界并不输出上下界)
C++中各种类型的范围
类型 | 含义 | 最小尺寸 | 范围 |
---|
bool | 布尔类型 | 最定义 | 0或1 |
char | 字符 | 8位 | 最小-128 最大127 |
short | 短整型 | 16位 | 最小-32768 最大32767 |
int | 整型 | 32位(4个字节) | 最小-2147483648 最大 2147483647 |
long | 长整型 | 32位(4个字节) | 最小-2147483648 最大 2147483647 |
long long | 长整型 | 64位 | |
float | 单精度浮点型 | 6位有效数字 | |
double | 双精度浮点型 | 12位有效数字 | |
代码示例
#include <stdio.h>
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main() {
string s1 = "2147482", s2 = "-2147483648";
string s3 = "2147483647", s4 = "-2147483648";
cout << stoi(s1) << endl; // stoi会做范围检查,超出范围会报错:'std::out_of_range'
cout << stoi(s2) << endl;
cout << atoi(s3.c_str()) << endl; // atoi不会做范围检查
cout << atoi(s4.c_str()) << endl;
return 0;
}