int atoi(const char* ptr) ;
1.跳过前面的空白字符(例如空格,tab缩进)等,可以通过isspace( )函数来检测;
2.遇上数字或正负符号才开始转换,而在遇到非数字或’\0’才结束转换,并将结果返回。
3.如果 ptr不能转换成 int 或者 ptr为空字符串,那么将返回 0。
4.该函数要求被转换的字符串是按十进制数理解的。
ok,知道这些了,实现它就不难了:
int my_atoi(const char* ptr)
{
//判断是否为空,为空返回0
if(ptr == NULL)
return 0;
int ret = 0;//返回值
int flag = 1;//默认为正数
//跳过空格或tab
while(!isspace(*ptr) == 0)
ptr++;
//处理正负号
if(*ptr == '-')
flag *= -1;
if(*ptr == '-' || *ptr == '+')
ptr++;
while(*ptr >= '0' && *ptr <= '9'){
ret = ((ret*10) + ((*ptr)-'0'));
ptr++;
}
return ret*flag;
}
测试:
void test_my_atoi()
{
char* str1 = "100";
char* str2 = "-100";
char* str3 = " 100";
char* str4 = " -100";
char* str5 = "100xxx0";
char* str6 = "xxx";
cout << my_atoi(str1) << endl;
cout << my_atoi(str2) << endl;
cout << my_atoi(str3) << endl;
cout << my_atoi(str4) << endl;
cout << my_atoi(str5) << endl;
cout << my_atoi(str6) << endl;
}
执行结果: