atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。atoi( ) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进)等。
可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束时(‘\0’)才结束转换,并将结果返回。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 。注意的问题:
1. 指针为NULL
2. 字符串为空字符串
3. 空白字符
4. 正号与负号问题
5. 溢出问题
6. 异常字符处理
int my_atoi(const char *str)
{
assert(str != NULL); //不能为空指针
long long sum = 0; //用来处理溢出问题
int false = 1; //判断正负数,默认为正数
while (isspace(*str))//判断是否为空格
{
str++;
}
if (*str == '-' || *str == '+') //正负号处理
{
if (*str == '-')
{
false = -1;
}
str++;
}
while (isalnum(*str)) //判断是否为数字字符
{
sum = sum * 10 + *str - '0';
if (1 == false) //判断正溢出
{
if (sum > INT_MAX)
{
return INT_MAX;
}
}
else //判断负溢出
{
if (-sum < INT_MIN)
{
return INT_MIN;
}
}
str++;
}
return (int)sum * false;
}
正常运行:
正溢出:
负溢出:
遇到其他符号停止: