联系:
1、都在cstring头文件里
2、功能都是把一个字符串转换为int
3、当字符串中有除了数字外的字符时,只会将这些字符前的数字转换为int
int main()
{
int a = atoi("+1234!!@12313131313113a12");//本例中stoi的输出结果一样
cout << a;
}
输出结果为

区别:
1、函数参数不同:stoi的参数是const string*,atoi的参数是const char*。可以直接将char作为stoi函数的参数,因为string类存在相应的构造函数。但不能将string作为atoi函数的参数,如果一定要用,先将string转化为char(利用string类内的data方法或者c_str方法或者copy方法)。
string和char*的转换可以参考我的博文https://blog.youkuaiyun.com/jojozym/article/details/104792257
2、范围检测不同:stoi有范围检测,超过则报错;atoi没有范围检测,超过则返回上界或者下界。
3、违法输入处理不同:stoi会直接报错,atoi会返回0(此处的违法指的是字符串从头部开始不存在一个可转换的整数序列,比如下面的几个例子)。
使用stoi:




使用atoi:


本文探讨了C++中将字符串转换为整数的两个函数——atoi和stoi的联系与区别。它们共同点在于都位于cstring头文件中,能处理含有非数字字符的字符串,仅转换数字部分。然而,stoi接受const string*作为参数,提供范围检查并抛出异常,而atoi则接受const char*,无范围检查,超出范围时返回整数边界或0。违法输入时,stoi会直接报错,而atoi则返回0。
5万+

被折叠的 条评论
为什么被折叠?



