#include <stdlib.h> int atoi( const char *str ); |
功能:将字符串str转换成一个整数并返回结果。参数str 以数字开头,当函数从str 中读到非数字字符则结束转换并将结果返回。例如,
i = atoi( "512.035" );
i 的值为 512.
自己写的实现如下:
//根据位数返回10的整倍数,如2位则返回10,3位返回100
int my_base(int iBitCount)
{
if (1 == iBitCount)
{
return 1;
}
else
{
return 10 * my_base(--iBitCount);
}
}
int my_atoi(const char * pstr)
{
int sum = 0;
if (!pstr) //指针若为空返回0
{
return sum;
}
const char * p = pstr;
const char * pTemp;
int iBitcount = 0; //有效数字字符位数
int sign = 1; //符号
//让指针指向不为' '的字符
while (*p == ' ')
{
++p;
}
//首先判断转换后的整数是为正数还是负数
if (*p == '-' || *p == '+')
{
if (*p == '-')
{
sign = -1;
}
++p;
}
//若除去符号位的第一位不为数字字符,则返回0
if (*p < '0' || *p > '9')
{
return sum;
}
//如果除去符号位后字符串第一位为‘0’,则找到其第一个不为‘0’的位置
if (*p == '0')
{
while (*p == '0')
{
p++;
}
pTemp = p;
p = pTemp; //p指向字符串第一个不为'0'的位置
}
pTemp = p; //保存p的值,这里的p始终指向字符串第一个不为'0'的位置
//统计字符串转换为整数后的位数,扫描字符串的每一位必须保证是数字字符
while (*p != '\0' && (*p >= '0' && *p <= '9'))
{
++iBitcount;
++p;
}
p = pTemp; //p指向字符串第一个不为'0'的位置
while (*p != '\0' && (*p >= '0' && *p <= '9'))
{
sum += (*p - '0') * my_base(iBitcount); //*p - '0'将字符转换为对应的整型数字,并乘以该字符转换为整数后其对应的整数基数
++p;
--iBitcount;
}
return sum * sign; //返回值要带上符号
}
PS:若iBitcount >= 11,则转换后的整数已经溢出;若iBitCount = 10 && sum >2147483647,则转换后的整数也已经溢出。