atoi()函数的功能:将字符串转换成整型数;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,同时要考虑转换数据的大小,不应该溢出(int)。而再遇到非数字时则直接返回。当字符是('\0')时才结束转化,并将结果返回(返回转换后的整型数)。
#include<stdio.h>
#include<assert.h>
#include<ctype.h>
int atoi(char *str)
{
long long result=0;
bool IsSign = false; //如果是正数则是false,否则就为true
assert(str != NULL );
//去掉空格
while(*str == ' ')
{
str++;
}
//判断正负,如果有+ - 号则向str++;
if(*str == '-')
{
IsSign = true;
}
if(*str =='-' ||*str == '+')
{
str ++;
}
//判断是否是数字和溢出的情况
while(!(isdigit(*str)==0 || (!IsSign && result > 0x7fffffff) || (IsSign && result > 0x80000000)))
{
result = result * 10 + (*str - '0');
str++;
}
//数字中可能含有字母或者其他
if( !isdigit(*str) && *str !='\0')
return 0;
if((!IsSign && result > 0x7fffffff) || (IsSign && result > 0x80000000))
{
return 0;
}
return IsSign? (int)(-result):(int)result;
}
void main()
{
char* str =" 4435s23";
int result = atoi(str);
printf("%d\n",result);
}
经过一些测试通过!