c语言-模拟实现atoi

这是一道被我遗漏了好久的一道题,最近被考到了,才发现好像被自己遗漏了,再次记录一下,就算查漏补缺吧。

atoi

atoi函数功能:用来将一个字符串转换为整形。
该函数会从第一个字符开始跳过前面的空格,直到遇到正负号才开始转换,遇到非数字或‘\0’结束转换。如果不能转换或是空字符串就返回0。

首先我们先考虑需要用到的测试用例:
比如
正负数:“+1234”“-1234”
非数字:“abcd”
数字:“1234”
混合:“1234abcd”
用库函数atoi测试一下结果:
这里写图片描述

下面是代码:

#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int my_atoi(const char *str)
{
    assert(str);
    int num=0;
    int sign=1;
    char *p=(char *)str;
    while(*p!='\0')
    {
        if(*p==' ')
        {
            p++;
        }
        else if(*p=='+')
        {
            p++;
            sign=1;
        }

        else if(*p=='-')
        {
            p++;
            sign=-1;
        }
        while(*p>'0'&&*p<'9')
        {
            int n=*p -'0';
            p++;
            num=(num*10+n);
        }
        return sign*num;
    }      
    return 0;
}

int main()
{
    char str1[]="abcd";
    char str2[]="1234";
    char str3[]="-1234";
    char str4[]="1234abcd";
    printf("%d\n",my_atoi(str1));
    printf("%d\n",my_atoi(str2));
    printf("%d\n",my_atoi(str3));
    printf("%d\n",my_atoi(str4));
}

测试结果如下:
这里写图片描述

思路:首先要检测空格跳过空格,其次检测正号负号,将其记录下来用来返回带符号的结果,然后转换字符,将单个字符减字符0就能转换为数字,然后通过计算得出转换结果,注意的是:不能用指针再来接受转换后的结果,用指针来接受,不论是单个字符的结果还是最后的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值