atoi() 函数用来将字符串转换成整数(int),其原型为:
int atoi (const char * str);
【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0’)才结束转换,并将结果返回。
【返回值】返回转换后的整型数;如果 str 不能转换成 int 或者 str 为空字符串,那么将返回 0。
对atoi函数的模拟实现如下(这里采用C++的方式来实现):
#include <iostream>
using namespace std;
int StrToInt(string str) {
int num = 0;
int flag = 1;
size_t i = 0;
while(str[i] == ' '){
//遇到空格就跳过
i++;
}
if(str[i] == '-'){
//如果开头是负号就把标记改为-1
flag = -1;
i++;
}
if(str[i] == '+'){
i++;
}
while(str[i] >= '0' && str[i] <= '9'){
//只要是数字,就将num原来的值乘10并加上现在的数
//现在的数等于字符形式减去'0'
//比如'9'字符9减去'0'字符0等于数字9
num = num * 10 + str[i] - '0';
if(i < str.size() - 1)
i++;
else
break;
}
if(i == str.size() - 1){
//这说明到字符串最后都是数字,没有别的字符
return num * flag;
}else{
//i没有走到字符串最后位置,表示上述循环不是因为break退出
//而是因为有非法的字符而退出的,返回0
return 0;
}
}
测试代码如下:
int main(){
string str1 = " -123";
string str2 = " 2345";
string str3 = " +231";
string str4 = " 4abc4";
cout << StrToInt(str1) << endl;
cout << StrToInt(str2) << endl;
cout << StrToInt(str3) << endl;
cout << StrToInt(str4) << endl;
return 0;
}
运行结果如下: