# C语言实现atoi和atof函数

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>

int ato_i(char *p) {
assert(p);
int k = 0;
int sign = 1;
while (*p) {
if (isdigit(*p)) {
k = k * 10 + *p - '0';
} else if (k == 0) {
if (*p == '-' && sign == 1) {
sign = sign * (-1);
}
p++;
continue;
} else break;

p++;
}

return k * sign;
}

double ato_f(char *p) {
double val, power;
int sign, i;
for (;isspace(*p) && *p != '\0'; p++) ;
sign = (*p == '-') ? -1 : 1;
if (*p == '-' && *p == '+') p++;
for (val = 0.0; isdigit(*p) && *p != '\0'; p++) {
val = 10 * val + *p - '0';
}

if (*p == '.') p++;

for (power = 1.0; isdigit(*p) && *p != '\0'; p++) {
val = 10 * val + *p - '0';
power *= 10;
}

return sign * val / power;
}

double ato_fe(char *p) {
double val, val2, power;
int sign, sign2, i;
for (;isspace(*p) && *p != '\0'; p++) ;
sign = (*p == '-') ? -1 : 1;
if (*p == '-' && *p == '+') p++;
for (val = 0.0; isdigit(*p) && *p != '\0'; p++) {
val = 10 * val + *p - '0';
}

if (*p == '.') p++;

for (power = 1.0; isdigit(*p) && *p != '\0'; p++) {
val = 10 * val + *p - '0';
power *= 10;
}

if (tolower(*p) == 'e') p++;
sign2 = (*p++ == '-') ? -1 : 1;
for (val2 = 0.0; isdigit(*p) && *p != '\0'; p++) {
val2 = 10 * val2 + *p - '0';
}

if (sign2 == -1)
return sign * val / power / pow(10, val2);
else
return sign * val * pow(10, val2) / power;
}

long ato_l(char *p) {

}

int main(int argc, char **argv) {
char *p = "123";
char *p1 = "-123";
char *p2 = "12a3";
char *p3 = "  123";
printf("p is %s, and ato_i(p) = %d \n", p, ato_i(p));
printf("p1 is %s, and ato_i(p1) = %d \n", p1, ato_i(p1));
printf("p2 is %s, and ato_i(p2) = %d \n", p1, ato_i(p2));
printf("p3 is %s, and ato_i(p3) = %d \n", p1, ato_i(p3));

char *s = "123.45";
char *s2 = "123.45e-2";
double d = ato_f(s);
double d2 = ato_fe(s2);

printf("ato_f = %f \n", ato_f(s));
printf("ato_fe = %f \n", ato_fe(s2));
return 0;
}

p is 123, and ato_i(p) = 123
p1 is -123, and ato_i(p1) = -123
p2 is -123, and ato_i(p2) = 12
p3 is -123, and ato_i(p3) = 123
ato_f = 123.450000
ato_fe = 1.234500 

• 本文已收录于以下专栏：

## C语言实现atoi，itoa和atof

• li_canhui
• 2011年09月25日 21:12
• 3561

## C语言中的atoi函数的实现

C语言中有很多的库函数，其实平时没事的时候多去实现一下里面的库函数还是很有用的，下面就来讲一讲C语言中的atoi函数，这个函数的主要功能是将一个字符串转化为一个数字，可能第一眼看上去，你会觉得这是一个...
• Loving_Forever_
• 2016年04月30日 11:00
• 5231

## C语言atoi、atof、atol、atrtod，strtol和strtoul的汇总

• gdut2015go
• 2015年06月02日 09:43
• 4054

## C语言 atof()的实现

atof()的实现，实现了与c自带函数的相同效果
• wutao1530663
• 2017年01月12日 20:09
• 293

## 【C语言】编写函数实现库函数atof

//编写函数实现库函数atof #include #include #include #include double calculate(const char *src, int flag) ...
• doudouwa1234
• 2015年07月05日 10:47
• 1121

## 学习笔记——atoi函数的用法及用C语言实现atoi

• xucongjiang
• 2010年10月17日 20:05
• 9835

## C语言atof()函数：将字符串转换为double(双精度浮点数)

• anhuibozhoushatu
• 2016年08月24日 20:02
• 661

## C语言中atof函数功能及用法

• xuefu2008
• 2009年10月09日 15:42
• 9896

## 【c语言】模拟实现库函数的atof函数

// 模拟实现库函数的atof函数 #include #include #include #include double my_atof(char const *p) { double...
• zhaoyaqian552
• 2015年07月04日 16:09
• 731

## atof(),atoi(),itoa(),sprintf()等用法总结

• cxh342968816
• 2011年07月23日 12:35
• 12929

举报原因： 您举报文章：C语言实现atoi和atof函数 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)