atoi函数的讲解和模拟实现

本文详细介绍了C语言中的atoi函数,包括处理字符串中的数字字符转换为整数的情况,如遇到字母、空格和正负号的处理方式,以及如何模拟实现一个类似的函数以确保正确性。
摘要由CSDN通过智能技术生成

一.atoi函数介绍

简单来讲,就是将一个字符串中的数字字符变为整数。

二.一些特殊点

1.字符串内含有字母

#include<stdio.h>
#include<stdlib.h>
int main()
{
    char a[]="123412";
    int ret=atoi(a);
    printf("%d",ret);
    return 0;
}

例如一个字符串ch="a1234",那么atoi第一次检索时没有直接遇到数字,而是遇到了字母,那么就会返回0,如图。

2.字符串内含有空格

atoi会跳过前面的空格,直至检索到数字。如果该字符串全部都是空格,那么就会返回0。

如果字符串数字和数字之间存在空格,那么不会继续检索。

3.字符串内含有正负号

atoi会自动识别正负号,并在输出的数字前面加上正负号。

但如果是在数字之后的正负号,那么就会与数字后遇到字母,空格同理,停止继续检索。

三.atoi函数模拟实现

在编写时,我们需要注意以下几点:1,开头遇到空格应往后继续跳过,直到遇到数字;2,如果碰到字母应直接返回0;3,应检查atoi转换后的数字是否还在int表示范围内。

代码如下

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<limits.h>

int myatoi(char* p)
{
    if (*p == '\0')//判断是否为空指针
    {
        return 0;
    }
    while (isspace(*p))
    {
        p++;
    }//判断空格


    int flag = 1;
    long m = 0;
    if (*p == '+')
    {
        flag = 1;
        p++;
    }
    else if (*p == '-')
    {
        flag = -1;
        p++;
    }//判断正负号

    while (*p != '\0')
    {

        if (*p >= '0' &&*p <= '9')
        {
            m = m * 10 + flag * (*p - '0');
        }//对数据进行转换
        else
        {
            break;  //你不是数字是不是就要break,离开循环
        }
        if (m< INT_MIN || m > INT_MAX)//判断是否超出int表示范围
            break;
        p++;
    }
    return m;
}
int main()
{
    char a[1000];
    fgets(a, 1000, stdin);//输入字符串
    int len = strlen(a);
    a[len - 1] = '\0';//计算字符串长度并在末尾加上斜杠0,因为我在这里是以字符数组的方式定义的

    int m = myatoi(a);
    printf("%d", m);
    return 0;
}

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值