码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C语言-atoi函数的使用和实现


    atoi是C语言中常见的函数。大家可能对于他不太熟悉,其主要还是因为学校可能没有讲到。其实有很多函数像atol、atof都是一样的,本篇文章以atoi为例,剩余大家如果感兴趣可以再去了解。

    目录

    1.函数介绍

    2.代码演示

    3.atoi函数的模拟实现

    4.扩展


    1.函数介绍

    int atoi (const char * str);

    功能:

    1.解析字符串的内容,将字符串转化成整数

    2.atoi的使用需要包含头文件

    参数:

    str:指针,指向了待转化的字符串

    返回值:

    转化成功的话,返回转化得到的整数,如果是空字符串或者是跳过空白字符后第一个不是数字字符将返回0,如果转化得到数字超出int的取值范围,则是未定义的行为。

    2.代码演示

    1. #include
    2. #include
    3. int main()
    4. {
    5. printf("%d\n", atoi(" "));
    6. printf("%d\n", atoi(" abc"));
    7. printf("%d\n", atoi("123"));
    8. printf("%d\n", atoi(" 123"));
    9. printf("%d\n", atoi(" +123"));
    10. printf("%d\n", atoi(" -123"));
    11. printf("%d\n", atoi(" -123abc"));
    12. printf("%d\n", atoi("111111111111111111111111111"));//行为未定义
    13. return 0;
    14. }

    输出结果:VS2022

    1. 0
    2. 0
    3. 123
    4. 123
    5. 123
    6. -123
    7. -123
    8. 2147483647

    3.atoi函数的模拟实现

    atoi函数的模拟实现可能有些复杂,但一定要理清思路:要先跳过空白字符,再看有无+-,如果有还需考虑最后的符号,用flag记录;同时ret值不能大于最大,也不能小于最小。

    1. int my_atoi(const char* str)
    2. {
    3. //跳过空白字符
    4. while (isspace(*str))
    5. str++;
    6. //判断正负符号
    7. int flag = 1;
    8. if (*str == '+')
    9. {
    10. str++;
    11. }
    12. else if (*str == '-')
    13. {
    14. flag = -1;
    15. str++;
    16. }
    17. //用ret记录值
    18. long ret = 0;
    19. while (*str != '\0')
    20. {
    21. //判断是否是数字字符
    22. if (isdigit(*str))
    23. {
    24. //转化为整型,如'1'-'0'=1
    25. ret = ret * 10 + (*str - '0') * flag;
    26. //最大只能INT_MAX,最小只能INT_MIN
    27. if (ret > INT_MAX)
    28. {
    29. ret = INT_MAX;
    30. }
    31. else if (ret < INT_MIN)
    32. {
    33. ret = INT_MIN;
    34. }
    35. }
    36. else
    37. return (int)ret;
    38. str++;
    39. }
    40. return (int)ret;
    41. }

    4.扩展

    其实还有两个函数可以了解一下:

    1.atol:将字符串转换成long类型,转换的范围是比atoi要更大一些。

    2.strtol:将字符串转换成long类型,这个函数更加复杂,可以按照各种进制转换。

    可以扩展学习一下。

  • 相关阅读:
    推荐系统笔记(十六):推荐系统图协同过滤的深入理解/
    【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第六章 Vim 编辑器的使用
    基于微信小程序的房屋租赁系统设计与实现(源码+lw+部署文档+讲解等)
    Linux系统tcp连接设置
    蓝牙耳机什么牌子音质最好?高音质蓝牙耳机盘点
    LeetCode 1582. 二进制矩阵中的特殊位置
    Jetson nano 安装Ubuntu20.04系统
    Prometheus之Dockerfile编写、镜像构建、容器启动
    Effective HPA:预测未来的弹性伸缩产品
    Ranorex Studio 10.x Crack
  • 原文地址:https://blog.csdn.net/2302_81580770/article/details/137972905
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号