atoi函数及模拟实现

✅博客主页:爆打维c-CSDN博客​​​​​​ 🐾

🔹分享c语言知识及代码 

文章目录

一、atoi函数的简要介绍

1.函数原型

二、atoi函数的使用示例

💠正数示例:

💠负数示例:

💠带有符号示例:

💠无效输入示例:

三、模拟实现atoi

1.思路

2.实现代码

总结:


一、atoi函数的简要介绍

1.函数原型

▪️ atoi(ascii to integer)是C语言中的一个库函数,用于将字符串转换为对应的整数。

▪️ 规则是:跳过不可见字符,碰到负号或者数字开始转换,转换到非数字字符为止。

头文件<stdlib.h>

int atoi (const char * str); 

原文:

译文:


二、atoi函数的使用示例

 当使用atoi函数将字符串转换为整数时,不同情况会导致不同的结果。以下是一些示例和解释:

💠正数示例:

const char *str1 = "12345";
int num1 = atoi(str1);
// 输出: num1 = 12345

在这个示例中,输入的字符串是一个正数,atoi函数将其转换为对应的整数。

💠负数示例:

const char *str2 = "-9876";
int num2 = atoi(str2);
// 输出: num2 = -9876

在这个示例中,输入的字符串是一个负数,atoi函数将其转换为对应的负整数。

💠带有符号示例:

const char *str3 = "+42";
int num3 = atoi(str3);
// 输出: num3 = 42

在这个示例中,输入的字符串带有正号,atoi函数会忽略正号并将其转换为对应的整数。

💠无效输入示例:

const char *str4 = "12abc";
int num4 = atoi(str4);
// 输出: num4 = 12

在这个示例中,输入的字符串以有效的数字开头,但后面包含了非数字字符。atoi函数会在遇到非数字字符时停止转换,返回之前已转换的数字部分。

大家也可以自己敲代码试验atoi函数的使用:


三、模拟实现atoi

1.思路

有了上述对atoi函数比较清晰的了解,再进行模拟实现就不难了,思路如下
🔸首先判断 字符串是否为空或者空指针,若是则返回0。
🔸跳过空格位
🔸判断字符串的字符是否为正号或负号,若是则记录下符号,并将指针后移一位。
🔸遍历字符串的每个字符,若字符为数字,则将其转换为对应的整数,并累加到结果中。若遇到非数字字符,停止遍历。
🔸根据之前记录的符号,若为负号,则将结果取反。

2.实现代码

int My_atoi(const char*s){
    int sign = 1; 
    //为空或空指针返回 0
    if (s == NULL || *s == '\0') {
        return 0;
    }
    //跳过空格
    while(*s == ' ') {
        s++;
    }
    //判断符号位
    if (*s == '-'||*s=='+') {
        if (*s == '-') {
            sign = -1;
        }
        s++;
    }
    int result = 0;  //计算结果
    while (*s) {
        if (*s > '9' || *s < '0') {
            break;
        }
        else {
            //*s = *s - '0';
            result = result * 10 +( *s-'0'); //转换为对应的整数,并累加
            s++; 
        }
    }
    return result*sign;
}

总结:

需要注意的是,atoi函数的返回值为int类型。当遇到无效输入或非数字字符时,atoi函数会返回0。这意味着在处理可能包含无效输入的字符串时,应该注意检查返回值来判断转换是否成功。

另外,需要注意atoi函数没有处理整数溢出的能力。如果转换的结果超出了int类型的范围,将导致结果不准确。为了处理溢出情况,可以考虑使用更强大的函数,如strtol函数,它提供了更多的错误处理和转换控制选项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值