您的位置:首页 > 编程语言 > C语言/C++

C/C++ atoi、atof与itoa函数的实现

2017-10-07 14:40 627 查看
1.atoi(ascii to integer)是把字符串转换成整型数的一个函数.atoi()函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等)。int atoi(char s[])
{
int i, n;
n = 0;
for (i = 0; s[i] >= '0'&&s[i] <= '9'; ++i)
n = 10 * n + (s[i] - '0');
return n;
}
2.atof(ascii to float)是把字符串转换为浮点数的一个函数。atof()函数会扫描参数nptr字符串,跳过前面的空白字符(例如空格,tab缩进等)。
double atof(char s[])
{
double val, power;
int i, sign;

for (i = 0; isspace(s[i]); i++)
;
sign = (s[i] == '-') ? -1 : 1;
if (s[i] == '+' || s[i] == '-')
i++;
for (val = 0.0; isdigit(s[i]); i++)
val = 10.0*val + (s[i]-'0');
if (s[i] == '.')
i++;
for (power = 1.0; isdigit(s[i]); i++) {
val = 10.0*val + (s[i] - '0');
power *= 10.0;
}
return sign*val / power;
}
2.itoa(integer to ascii)将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。
其形式为: char *itoa(int value,char *string,int radix)
int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等。char *
Itoa(int num, char *str, int radix)
{
char index[] = "0123456789ABCDEF";
unsigned unum;
int i = 0, j, k;
if (radix == 10 && num < 0)
{
unum = (unsigned)-num;
str[i++] = '-';
}
else
unum = (unsigned)num;
do {
str[i++] = index[unum % (unsigned)radix];
unum /= radix;

} while (unum);
str[i] = '\0';

if (str[0] == '-')
k = 1;
else
k = 0;
char temp;
for (j = k; j <= (i - 1) / 2; j++)
{
temp = str[j];
str[j] = str[i-1+k-j];
str[i - 1 + k - j] = temp;
}
return str;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: