atoi
注意:使用该函数时要注意atoi返回的是int类型,注意输入str的范围不要超出int类型的范围。字符串str不能出现非法字符,也不能出现多个符号字符(多个减号/加号)。
/** \brief 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。
*
* \param str -- 要转换为整数的字符串。
* \return 该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。
*
*/
int latoi(const char *str)
{
int num = 0;
char sign = 1;
//跳过左边空白字符
while(*str == ' ')
{
str++;
}
//判断有无符号位
if(*str == '-' || *str == '+')
{
if(*str == '-')
sign = -1;
str++;
}
while(*str != '\0')
{
if(*str >= '0' && *str <= '9')
{
num *= 10;
num += (*str - '0');
}
else if(*str != ' ')
break;
str++;
}
return num * sign;
}
改进的atoi
注意:使用该函数时要注意atoi返回的是int类型,注意输入str的范围不要超出int类型的范围。转化时跳过前面的空格等空字符,直到遇上数字或正负符号才开始做转换, 而再遇到非数字或字符串结束标志(’/0’)才结束转换,并将结果返回。
/** \brief 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。
* 转化时跳过前面的空格等空字符,直到遇上数字或正负符号才开始做转换,
* 而再遇到非数字或字符串结束标志('/0')才结束转换,并将结果返回。
*
* \param str -- 要转换为整数的字符串。
* \return 该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。
*
*/
int latoi(const char *str)
{
int num = 0;
char sign = 1;
//跳过左边非法字符
while(*str != '\0')
{
if(*str > '0' && *str < '9')
break;
else if(*str == '-' || *str == '+')
{
break;
}
str++;
}
//判断符号位
while(*str == '-' || *str == '+')
{
if(*str == '-')
sign *= -1;
str++;
}
while(*str != '\0')
{
if(*str >= '0' && *str <= '9')
{
num *= 10;
num += (*str - '0');
}
//跳过数字中的空格字符
else if(*str != ' ')
break;
str++;
}
return num * sign;
}
atof
/** \brief 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
*
* \param str -- 要转换为浮点数的字符串。
* \return 函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。
*
*/
double latof(const char *str)
{
double num = 0;
double dec = 0;
char flag = 0;
char sign = 1;
double pow = 0.1;
//跳过左边空白字符
while(*str == ' ')
{
str++;
}
//判断有无符号位
if(*str == '-' || *str == '+' || *str == '.')
{
if(*str == '-')
sign = -1;
//小数标志
else if(*str == '.')
flag = 1;
str++;
}
while(*str != '\0')
{
if(*str >= '0' && *str <= '9')
{
//小数部分
if(flag == 1)
{
dec += (*str - '0') * pow;
pow /= 10;
}
//整数部分
else
{
num *= 10;
num += (*str - '0');
}
}
else if(*str == '.')
{
if(flag == 1)
break;
flag = 1;
}
else if(*str != ' ')
break;
str++;
}
num += dec;
return num * sign;
}
改进的atof
/** \brief 把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
* 转化时跳过前面的空格等空字符,直到遇上数字、正负符号和小数符号才开始做转换,
* 而再遇到非数字或字符串结束标志('/0')才结束转换,并将结果返回。
*
* \param str -- 要转换为浮点数的字符串。
* \return 函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。
*
*/
double latof(const char *str)
{
double num = 0;
double dec = 0;
char flag = 0;
char sign = 1;
double pow = 0.1;
//跳过左边非法字符
while(*str != '\0')
{
if(*str > '0' && *str < '9')
break;
else if(*str == '-' || *str == '+' || *str == '.')
{
break;
}
str++;
}
//判断符号位
while(*str == '-' || *str == '+' || *str == '.')
{
if(*str == '-')
sign *= -1;
else if(*str == '.')
flag = 1;
str++;
}
while(*str != '\0')
{
if(*str >= '0' && *str <= '9')
{
//小数部分
if(flag == 1)
{
dec += (*str - '0') * pow;
pow /= 10;
}
//整数部分
else
{
num *= 10;
num += (*str - '0');
}
}
else if(*str == '.')
{
if(flag == 1)
break;
flag = 1;
}
else if(*str != ' ')
break;
str++;
}
num += dec;
return num * sign;
}