模拟实现atoi
代码:
#include<assert.h>
#include<stdio.h>
#include<ctype.h>
#include<limits.h>
int my_atoi(const char* str)
{
assert(str != NULL);
if (*str == '\0')
{
return 0;
}
//isspace 判断一个字符是不是空格
while (isspace(*str))
{
str++;
}
//代码执行到这里后str指向的是一个非空格的字符
int flag = 1;
if (*str == '+') {
flag = 1;
str++;
}
if (*str == '-') {
flag = -1;
str++;
}
//代码执行到这里后能够判断正负数
long long ret = 0;
while (*str != '\0') {
//判断是否为数字字符
if (isdigit(*str)) {//利用ASCII表
ret = ret * 10 + (*str) - '0';
if (ret > INT_MAX)
{
return INT_MAX;
}
if (ret < INT_MIN)
{
return INT_MIN;
}
}
else
{
//直接结束转换
return (int)ret * flag;
}
str++;
}
return (int)ret * flag;
}
int main() {
const char* str = " 0 -123abd";
int ret = my_atoi(str);
printf("%d\n", ret);
return 0;
}
结果: