atoi库函数模拟实现

第一次尝试
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>



int myAtoi(const char* str) {
    char TS[1024] = { 0 };
    char* ts = TS;
    //设置符号位,用来判定这样的情况:不见可字符,数字,不可见字符,数字
    //如果前面为不可见字符,在遇到数字后,flag1就++,这样就不会进入后面的不可见字符
    int flag1 = 0;
    //外部循环判定前面的 数字、正负号、不可见字符
    while ((*str > 47 && *str < 58)||((*str==43||*str==45)&&flag1==0)||(*str>=0&&*str<=32&&flag1==0)) {
        //内部循环判定出现数字之后的 不可见字符、正负号
        if ((*str > 47 && *str < 58)||((*str == 43 || *str == 45))) {
            *ts = *str;
            ts++;
            str++;
            flag1++;
        }
        else {
            str++;
        }
    }
    *ts = '\0';
    int i = 0;
    //设置符号位,如果是‘-’,那么flag就加一
    int flag = 0;
    if (TS[i] == 45) {
        i++;
        flag++;
    }
    int ret = 0;
    while (TS[i] != '\0') {
        ret += (TS[i] - 48);
        ret *= 10;
        i++;
    }
    ret /= 10;
    //将数字筛选出来转换成对应的整形之后,如果flag==1,那么就让数字减去自己的二倍,即可获得对应数字的负值
    if (flag == 1) {
        return ret - ret * 2;
    }
    //如果flag==0,那么正常输出转化好的数字
    return ret;
}

int main() {
    printf("输入一串字符串:\n");
    char str[1024] = { 0 };
    int i = 0;
    char c = 0;
    scanf("%c", &c);
    while (c != '\n') {
        str[i] = c;
        scanf("%c", &c);
        i++;
    }
    printf("%s\n", str);

    int ret = myAtoi(str);
    printf("%d\n", ret);

    /*int a = atoi("  123 123jklb");
    printf("%d\n", a);*/
    return 0;
}

用法:将字符串里的数字字符转化为整形数。返回整形值。
注意:转化时跳过前面的不可见字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时\0才结束转换,并将结果返回。具体转化思路见上面代码的注释。


博客园发表于 2020-11-25 12:16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值