atoi()字符转整数的自实现

本文详细介绍了C语言中atoi函数的工作原理,包括如何处理空字符串、前导空格、正负号以及非数字字符。并通过示例代码展示了如何手动实现atoi函数,确保输入的字符串正确转换为整数,同时检查可能的溢出情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C语言中可以通过atoi()函数实现将char 数字 转化为 int 类型

例如: 

        char ch[] = "123456";     ---->int i = 123456
        char *ch1  = "-5678";     ---->int i = -5678
        char ch2[] = "   -3456";   ---->int i = -3456

那么我们可以怎么实现这个功能呢

 

首先需要考虑几个问题:

                                       1、字符是否为空

                                       2、前面是否有空格

                                       3、是否带有正负号

                                       4、是否为数字,而不是其他字符

                                       5、是否会溢出 int类型在大多数编译器中为4个字节,大于65535则溢出

 

下面是根据以上的要求实现的代码,还有一些具体要求这边暂时没有写进来,例如"123abc"这类字符的处理

 

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

int atoi2(const char *ch)
{
        int num = 0,sign = 1;
        //判断传进来的参数是否为空
        if(ch == NULL)
                return 0;

        //跳过前面的空格,并判断有没有正负号
        while(*ch == ' ')   ch++;
        if(*ch == '+') { sign = 1;ch++;}
        if(*ch == '-') { sign = -1;ch++;}

        //读取内容且须为数字
        while((*ch >= '0')&&(*ch <='9')){
                num = num*10 + (*ch -'0');
                ch++;

                //判断是否溢出65535
                if(num >65535) return 0;
        }
        return num*sign;
}

int main()
{
        char ch[] = "12345612345678";
        char *ch1  = "-5678";
        char ch2[] = "   -3456";
        char ch3[] = "abc123";
       
        printf("12345612345678=%d\n",atoi2(ch));
        printf("-5678=%d\n",atoi2(ch1));
        printf("    -3456=%d\n",atoi2(ch2));
        printf("abc123=%d\n",atoi2(ch3));

        return 0;
}

最后的实现结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值