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);
}

经过一些测试通过!