【C程序设计语言第二版】atoi和atof函数的实现

知识点

atoi函数:将字符串转换为整型
atof函数:将字符串转换为浮点类型

这里我们需要用到字符与ascii码一一对应的知识,对于atof函数我们可以首先忽略小数点,每次取一个数,再将上次得到的数乘以10求和,得到一个大整数后再将小数点左移即可。而atoi函数可以借助atof函数+取整完成。

**注:**这里需要对字符串进行去除空白以及符号进行特判。


#include <bits/stdc++.h>
using namespace std;

/* 字符串转浮点数 */
double my_atof(const char *num) {
    double val, power;
    int i, sign;
    for(i = 0; isspace(num[i]); ++i); /* 去除空白符 */
    sign = num[i] == '-' ? -1 : 1;
    if(num[i] == '+' || num[i] == '-')i++; /* 去掉符号 */
    for(val = 0.0; isdigit(num[i]); ++i) 
        val = val * 10 + num[i] - '0';
    if(num[i] == '.')i++;
    for(power = 1.0; isdigit(num[i]); ++i) {
        val = val * 10 + num[i] - '0';
        power *= 10.0;
    }
    return val * sign / power;
}


/* 字符串转整数 */
int my_atoi(const char *num) {
    return (int) atof(num);
}


int main()
{
    char * s1 = "12.34";
    char * s2 = "123123";
    cout << my_atof(s1) << endl;
    cout << my_atoi(s2) << endl;
    return 0;
}
发布了128 篇原创文章 · 获赞 20 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u011544909/article/details/95797883
今日推荐