椋鸟C语言笔记#27:字符串数字提取(atoi、atol、atoll、atof)
萌新的学习笔记,写错了恳请斧正。
目录
atoi
模拟实现
atol与atoll(C99起)
atof
合法的浮点值
返回值
使用示例
在stdlib.h中还有几个有意思的字符串函数
它们的功能是将字符串开头的数字提取出来
下面我们具体看一看这几个函数吧
atoi
#include <stdlib.h>
int atoi(const char* string);
atoi,即auto int。舍弃任何空白符,直至找到首个非空白符,然后接收尽可能多的字符以组成合法的整数(可以有负号)表示,并转换之为整数值。如果没有读取到数字,就返回0;如果超出可读取类型范围,那么返回值是未定义的。
使用示例如下:
#include <stdio.h>
#include <stdlib.h>int main(void)
{printf("%i\n", atoi(" -123junk"));printf("%i\n", atoi("0"));printf("%i\n", atoi("junk")); // 无可进行的转换printf("%i\n", atoi("2147483648")); // 在 int 范围外
}
输出:
-123
0
0
-2147483648
模拟实现
#include <stdio.h>
#include <ctype.h>
#include <assert.h>int my_atoi(const char* str)
{assert(str);int ret = 0, sign = 1, flag = 1;while (isspace(*str++));str -= 2;while (isdigit(*++str) || '-' == *str && flag || '+' == *str && flag)if (*str == '-')flag = 0, sign = -1;else if (*str == '+')flag = 0, sign = 1;elseflag = 0, ret = 10 * (ret + *str - '0');return sign * ret / 10;
}int main()
{char str[] = " -114514";int ret = my_atoi(str);printf("%d", ret);return 0;
}
atol与atoll(C99起)
与atoi功能完全一致,只是变成long和long long类型
#include <stdlib.h>
long atol(const char* string);
long long atoll(const char* string);
atof
atof用于提取的是浮点数(小数形式或者科学计数法)
atof函数使用需要包含stdlib.h和math.h两个头文件
#include <stdlib.h>
#include <math.h>
double atof(const char* string);
函数会舍弃任何空白符,直至找到首个非空白符。然后它会取用尽可能多的字符,以构成合法的浮点数表示,并将它们转换成浮点值。
合法的浮点值
1. 十进制浮点数表达式。它由下列部分组成:
- (可选) 正或负号
- 非空的十进制数字序列,可选地包含一个小数点字符(由当前的 C本地环境确定)(定义有效数字)
- (可选)
e或E,并跟随可选的正或负号,以及非空十进制数字序列(以 10 为底定义指数)
2. 十六进制浮点数表达式(C99 起)。它由下列部分组成:
- (可选) 正或负号
0x或0X- 非空的十六进制数字序列,选地包含一个小数点字符(由当前的C本地环境确定)(定义有效数字)
- (可选)
p或P,并跟随可选的正或负号,以及非空十进制数字序列(以 2 为底定义指数)
3. 无穷大表达式(C99 起)。它由下列部分组成:
- (可选) 正或负号
INF或INFINITY,忽略大小写
4. 非数(NaN)表达式(C99 起)。它由下列部分组成:
- (可选) 正或负号
NAN或NAN(char_sequence),忽略NAN部分的大小写。 char_sequence 只能由数字、拉丁字母和下划线构成。结果是一个静态的 NaN 浮点值。
5. 任何其他可由当前C本地环境接受的表达式
返回值
成功时返回代表string内容的double值
若转换的值在返回值范围外,则返回值未定义
若无可进行的转换,则返回 0.0
使用示例
#include <stdlib.h>
#include <stdio.h>int main(void)
{printf("%g\n", atof(" -0.0000000123junk"));printf("%g\n", atof("0.012"));printf("%g\n", atof("15e16"));printf("%g\n", atof("-0x1afp-2"));printf("%g\n", atof("inF"));printf("%g\n", atof("Nan"));printf("%g\n", atof("1.0e+309")); // 超出 double 范围printf("%g\n", atof("0.0"));printf("%g\n", atof("junk")); // 无可进行的转换
}
在某种环境下输出:
-1.23e-08
0.012
1.5e+17
-107.75
inf
nan
inf
0
0
相关文章:
椋鸟C语言笔记#27:字符串数字提取(atoi、atol、atoll、atof)
萌新的学习笔记,写错了恳请斧正。 目录 atoi 模拟实现 atol与atoll(C99起) atof 合法的浮点值 返回值 使用示例 在stdlib.h中还有几个有意思的字符串函数 它们的功能是将字符串开头的数字提取出来 下面我们具体看一看这几个函数吧 …...
Git 命令使用总结
git init: 在当前目录创建一个新的空Git仓库。git clone [url]: 从远程仓库克隆一个项目到本地。git add [file]: 将文件添加到暂存区。git commit -m “message”: 提交暂存区的文件到本地仓库,并添加一条提交信息。git status: 查看当前工作区的状态(已…...
Linux常见面试题30题详细答案解析(二)
1. 如何使用Linux中的包管理器进行软件包依赖管理? Linux中的包管理器如apt、yum等可以自动处理软件包的依赖关系。当安装或升级软件包时,包管理器会自动解决软件包的依赖关系,确保所需的库和工具都已经安装。掌握如何使用包管理器进行依赖管…...
Linux查询指定时间点段日志Linux查询指定文件
Linux服务器高效查询日志查询文件 Ⅰ、常用几种日志查询语法Ⅱ、常用几种查询语法 Ⅰ、常用几种日志查询语法 #查询某日志前xx行日志 head -n 行数 日志文件名 #查询某日志后xx行日志 tail -n 行数 日志文件名 #查询固定时间点日志(前提是这个时间点确实有日志输出…...
2023年华为HCIA认证H12-811题库讲解
在VRP平台上,可以通过下面哪种方式返回到上一条历史命令?( ) A、Ctr1U B、Ctr1P C、左光标 D、上光标 试题答案:BD 试题解析:在VRP系统中,ctrlU为自定义快捷键,ct…...
MacOS上配置Jenkins开机自启动
之前文章有写过,如何在Windows环境下,通过vbsbat脚本的组合拳实现Jenkins的开机自启动,最近换了电脑,又要搭建Jenkins了,顺带整理分享下MacOS上配置Jenkins开机自启动的方法。 具体配置步骤: 打开终端应用…...
指针相关知识(入门)
通过前面的学习,我们已经对c语言有了一个初步的认识 接下来,我们继续学习。进入下一个阶段,指针。这个部分的知识较多,可能学习起来有些吃力,但是,从简到难,我们慢慢学习。 一.指针的概念 导入…...
我的NPI项目之Android 安全系列 -- Android Strongbox 初识
从Android9(Pie)开始,Google强烈建议支持Strongbox. 具体描述如下: 一直到目前的Android14. 对应的内容也一并贴出来: 说人话就是Android开始通过独立于主SoC的单元进行密钥存储了。 通常,这样的单元就是我们通常称作的Secure Element(SE)&am…...
3、Kafka 线上集群部署方案怎么做?
文章目录 1、操作系统的选择1.1、I/O 模型的使用1.2、数据网络传输效率1.3、社区支持度 2、磁盘的选择3、磁盘容量的规划3.1、举例思考本问题:3.2、计算一下:3.3、规划磁盘容量时你需要考虑下面这几个元素: 4、带宽规划4.1、计算 总结 1、操作…...
【Oracle】常用数据库sql记录
文章目录 1、获取指定日期所在年份2、获取指定日期所在月份3、获取指定日期去年同期日期4、获取指定日期所在年份的总天数5、获取年初到指定日期的天数6、除法运算7、递归查询8、REPLACE函数9、DECODE 函数10、聚合函数11、窗口函数11.1 ROW_NUMBER函数11.2 RANK函数11.3 LEAD …...
在线监控网址源码/ 网站监控工具源码/ 网站监控系统源码/定时任务/网站网址URL状态监控神器
源码介绍: 在线监控网址源码、 网站监控工具源码,它作为网站监控系统源码,有定时任务,支持卡密充值,是网站网址URL状态监控神器。让数据库监控更加简单和专业。远程云中监控、实时邮件告警、丰富的指标和图表、分析和…...
【Mysql】myisam和innodb的区别?
0 回答 myisam引擎是5.1版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用,而且myisam不支持外键,并且索引和数据是分开存储的。innodb是基于聚簇索引建立的,和myisam相反它支持事务、外键,并且通…...
vue 集成行政区域选择插件region和数据回显
故事:最近,项目需要进行行政区域围栏的绘制,由于老旧项目是利用js保存全国行政区域地址和编码,在选择器select进行匹配显示,但此方法复杂,因此选择集成区域插件region 步骤一:用命令安装region…...
The LINQ expression “xxx“ could not be translated
错误示例: var A B .GroupBy(item > item.id) .Select(groupedList > new { PlannerId groupedList.Key, RxList groupedList }); 解决方案: var A B .GroupBy(item > item.id) .Select(groupedList > new { PlannerId groupedList.…...
ubuntu下搜索文件的几种方法
一、whereis命令: whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。 whereis的命令格式: whereis [-bmsu] [BMS 目录名 -f ] 文…...
openCV图像SIFT特征
SIFT(尺度不变特征变换)是一种用于计算图像局部特征的算法,它对图像的尺度、旋转和亮度变化具有不变性。SIFT特征在计算机视觉领域被广泛应用于目标识别、图像配准、三维重建等任务中。 SIFT特征的计算包括以下几个步骤: 尺度空…...
黑豹程序员-axios+springmvc传递数组
问题 奇怪的现象,axios在往后台传递数组时,springmvc竟然接收不到 解决 尝试多次无果,突然看一篇文章写vue中的数组不是真正的数组需要强转转化JSON.stringify 将信将疑下测试了一把,还真的传递成功了。 不光要JSON.stringify…...
34.用过JavaConfig方式的spring配置吗?它是如何替代xml的?
用过JavaConfig方式的spring配置吗?它是如何替代xml的? 基于Java的配置,允许你在少量的Java注解的帮助下,进行你的大部分Spring配置而非通过XML文件。 以@Configuration 注解为例,它用来标记类可以当做一个bean的定义,被Spring IOC容器使用。 另一个例子是@Bean注解,它…...
解析Python的Lambda函数:【理解】与【运用】
目录 引言理解Lambda函数定义语法Lambda函数的特点 Lambda函数使用场景举例小结结束语 引言 在Python编程语言中,Lambda函数是一种特殊的函数形式,它以【简洁】、【快速】和【轻量级】而闻名。Lambda函数在需要短小函数的地方非常有用,比如在…...
C语言:实现字符串连接
在C语言中,字符串通常以字符数组的形式存储。连接两个或多个字符串是一项常见的任务。本博客将介绍如何使用C语言来实现字符串的连接。 库函数实现: strcat() 是C标准库中提供的一个函数,用于将一个字符串(源字符串)…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
