C语言实现atoi和atof函数

原创 2013年12月04日 20:25:38


#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

首先是atoi的实现,它的功能是将字符串转化为整数。 #include #include /* atoi : convert s to integer; version 2*/ int ...

C语言50题之模拟实现atof、atoi

atof,就是 把字符串转换成浮点数,这个函数就可以完成,他们的家族有很多:atoi,itoa,其中的意思,就不详细说了,这里举出一个即可,都是一个家族的嘛,都与规律的。 首先说一下关于字符串转换成...

用c语言实现一个自己的atof()函数

用c语言实现atof()函数,将字符分解用乘法和除法实现转换,代码如下 ****************************************************************...

尝试实现 atoi和atof函数

手动实现atoi以及atof的功能及思路

C函数的实现(strcpy,atoi,atof,itoa,reverse)

在笔试面试中经常会遇到让你实现C语言中的一些函数比如strcpy,atoi等 1. atoi 把字符串s转换成数字 int Atoi( char *s ) { int num = 0, i =...

atoi和atof函数的区别

  • 2012年07月27日 23:21
  • 34KB
  • 下载

模拟实现C语言中的库函数atoi

atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * str);【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(...

C语言atof函数的探索

#include #include //USING atof double atofM1(char s[]); double atofM2(char *s); double atofM3(char...
  • athefei
  • athefei
  • 2015年08月06日 00:06
  • 222

C语言中的atoi函数的实现

C语言中有很多的库函数,其实平时没事的时候多去实现一下里面的库函数还是很有用的,下面就来讲一讲C语言中的atoi函数,这个函数的主要功能是将一个字符串转化为一个数字,可能第一眼看上去,你会觉得这是一个...

C语言itoa()函数和atoi()函数详解(整数转字符C实现)

C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。 1.int/float to string/array: C语言提供了几个标准库函数,可以将任...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言实现atoi和atof函数
举报原因:
原因补充:

(最多只允许输入30个字)