C语言 / 自定义函数实现atoi

自定义函数实现atoi

atoi: 将字符串转换成数字

例子:

    char ch1[]="123"; --->转换成整数123
    char ch2[]="+123"; --->转换成整数123
    char ch3[]="-123"; --->转换成整数-123
    char ch4[]="a123"; --->转换成整数0
    char ch5[]="+123"; --->转换成整数123
    char ch6[]="123a456"; --->转换成整数123
    char ch7[]="-123a5"; --->转换成整数-123

实现代码如下:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

//
//自定义函数实现atoi
//


int my_atoi(const char *cptr);

int main(int argc, const char *argv[])
{
    char ch1[]="123";
    char ch2[]="+123";
    char ch3[]="-123";
    char ch4[]="a123";
    char ch5[]="+123";
    char ch6[]="123a456";
    char ch7[]="-123a5";

    char *parr[] = {ch1, ch2, ch3, ch4, ch5, ch6, ch7}; //指针数组; 本质是数组,存放了字符串的地址

    for(int i=0; i<7; i++)
    {
        int num = my_atoi(parr[i]);
        printf("ch%d=%s, num%d=%d\n", i+1, parr[i], i+1, num);                                                                                                                                                                                                                                                                                                                                                                                             

        parr[i];
    }



    return 0;
}


int my_atoi(const char *cptr)
{
    int num = 0;
    int nagtive = 0; //标记符号位是符号
        int i=0; //用于标记第一位是符号位

        for(; *cptr!='\0'; cptr++)  // 循环到字符串结束
        {
            //printf("*cptr=%c\t", *cptr);

            if(i==0)  // 处理第一位是符号位的
            {
                i=1;
                if(*cptr=='+') continue;
                else if (*cptr=='-')
                {
                    nagtive=1;
                    continue;}

            }

            if( *cptr>='0' && *cptr<='9')
            {
                num = num * 10 + *cptr - '0'; //将ascii码转换成整数
                    //printf("num=%d\t", num);
                    continue;
            }else{
                break;
            };


        }

    if(nagtive>0){
        num = -num;
    }
    return num;

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值