C语言:库函数atoi及其模拟实现

atoi:

atof是C语言标准库中的一个函数,用于将字符串转换为对应的浮点数/整形数。

 

函数接受一个参数str,该参数是一个指向以null结尾的字符串的指针。atof函数会尝试将这个字符串转换为一个浮点数,并返回转换后的结果。

要注意的是,atof函数在进行转换时会自动识别字符串中的浮点数表示形式,包括小数点、指数符号等。它会跳过字符串中的空格字符,直到遇到数字或者正负号。

如果无法进行有效的转换,atof函数会返回0.0作为转换结果。

#include <stdio.h>
#include <stdlib.h>int main()
{int ret1 = atoi("12345");double ret2 = atof("3.1415926");printf("%d\n", ret1);printf("%f\n", ret2);return 0;
}

模拟实现atoi函数

模拟实现时应防止读取空字符串,跳过空白字符串,处理正负号问题

#include <stdio.h>
#include <ctype.h>
#include <assert.h>
#include <limits.h>
enum State
{VALID,INVALID
}state=INVALID;// 全局的状态,它的标志返回的合法的值还是异常的值
//对state初始化为INVAKID表示为非法访问int my_atoi(const char* str)
{int flag = 1;assert(str);//空字符串if (*str == '\0')return 0;//跳过空白字符while (isspace(*str))str++;//处理正负号问题if (*str == '-'){flag = -1;str++;}else if (*str == '+'){str++;}long long ret = 0;while (*str != '\0'){if (isdigit(*str))//判断该位是否为非0{ret = ret * 10 + flag * (*str - '0');//防止访问数目过大if (ret<INT_MIN || ret>INT_MAX){return 0;}}else{return (int)ret;}str++;}state = VALID;return (int)ret;
}int main()
{int ret = my_atoi("-25");if (state == VALID)printf("%d\n",ret);elseprintf("非法访问:%d", ret);return 0;
}

模拟实现中使用到的库函数:

1.isspace

isspace是C语言标准库中的一个函数,用于判断一个字符是否为空白字符。

空白字符包括空格、制表符、换行符、回车符等字符。isspace函数的原型如下:

int isspace(int c);

函数接受一个整数值(通常是字符的ASCII码)作为参数,并返回一个非零值(真)或零(假)。具体而言:

  • 如果参数c是一个空白字符,函数返回非零值,表示真。
  • 如果参数c不是一个空白字符,函数返回零,表示假。

isspace函数常用于判断一个字符是否为空白,可以在循环中使用它来处理文本字符串中的空白字符,或者判断用户输入是否为有效的空白字符。

2.isdigit

isdigit 是C语言标准库中的一个函数,用于判断一个字符是否为数字字符。它的原型如下:

int isdigit(int c);

isdigit 函数接受一个整数参数(通常是字符的ASCII码),并返回一个非零值(真)或零(假)。

具体而言:

  • 如果参数c是一个数字字符(0-9),函数返回非零值,表示真。
  • 如果参数c不是一个数字字符,函数返回零,表示假。

以下是一个示例代码,演示了如何使用 isdigit 函数判断一个字符是否是数字字符:

#include <stdio.h>
#include <ctype.h>int main() {char ch = '5';if (isdigit(ch)) {printf("'%c' 是一个数字字符\n", ch);} else {printf("'%c' 不是一个数字字符\n", ch);}return 0;
}

输出:

'5' 是一个数字字符

注意:isdigit 是C标准库中的函数,如果在C++中使用,应该包含头文件 <cctype>,并将函数名写作 std::isdigit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/46745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 面试题 01.01. 判定字符是否唯一

文章目录 一、题目二、C# 题解 一、题目 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同&#xff0c;点击此处跳转。 示例 1&#xff1a; 输入: s “leetcode” 输出: false 示例 2&#xff1a; 输入: s “abc” 输出: true 限制&#xff1a; 0 < le…

飞机打方块(五)游戏音乐

一、新建节点 1.在Start场景中新建Music节点&#xff0c;绑定canvas 2.在Game场景中新建Music节点 3.新建节点 4.新建Music脚本&#xff0c;绑定Canvas Music.ts const { ccclass, property } cc._decorator;ccclass export default class NewClass extends cc.Component {p…

[Go版]算法通关村第十三关白银——数组实现加法和幂运算

目录 数组实现加法专题题目&#xff1a;数组实现整数加法思路分析&#xff1a;复杂度&#xff1a;Go代码 题目&#xff1a;字符串加法思路分析&#xff1a;复杂度&#xff1a;Go代码 题目&#xff1a;二进制加法思路分析&#xff1a;复杂度&#xff1a;Go代码 幂运算专题题目&a…

*args无疑是解决函数重载的一大创新利器--我用可变数量参数解决了函数重载问题

需求分析 最近遇到这样一个需求&#xff1a;根据用户传递的不同参数数量执行不同的功能。我这几天一直在思考这个问题&#xff1a;如何根据参数数量去执行不同的功能&#xff0c;最初的设想是把不需要的参数设置为NONE或者""再或者" "(后两者引号均表示传空…

Flink 流式读写文件、文件夹

文章目录 一、flink 流式读取文件夹、文件二、flink 写入文件系统——StreamFileSink三、查看完整代码 一、flink 流式读取文件夹、文件 Apache Flink针对文件系统实现了一个可重置的source连接器&#xff0c;将文件看作流来读取数据。如下面的例子所示&#xff1a; StreamExe…

【无标题】QT应用编程: QtCreator配置Git版本控制(码云)

QT应用编程: QtCreator配置Git版本控制(码云) 感谢&#xff1a;DS小龙哥的文章&#xff0c;这篇主要参考小龙哥的内容。 https://cloud.tencent.com/developer/article/1930531?areaSource102001.15&traceIdW2mKALltGu5f8-HOI8fsN Qt Creater 自带了git支持。但是一直没…

软件测试学术顶会——ISSTA 2023 论文(网络安全方向)清单、摘要与总结

总结 本次会议涵盖的安全研究主题广泛,包括源代码分析、二进制代码分析、恶意软件检测、漏洞检测、模糊测试、程序验证等。一些热门的研究方向包括:基于机器学习的漏洞检测、大型语言模型在软件安全中的应用、区块链智能合约安全分析。这些方向都在最近几年持续发展。一些较冷门…

【C++】IO流

C语言的输入和输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据&#xff0c;并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。 注意宽度输出和精度输出控制。C语言借助了相应的缓冲区…

postgresql 分组

postgresql 数据汇总 分组汇总聚合函数注意 总结 分组统计总结 高级分组总结 分组汇总 聚合函数 聚合函数&#xff08;aggregate function&#xff09;针对一组数据行进行运算&#xff0c;并且返回单个结果。PostgreSQL 支持以下常见的聚合函数&#xff1a; • AVG - 计算一…

redis--数据类型

数据类型 String 描述&#xff1a;String类型是Redis中最基本的数据类型&#xff0c;它可以存储任何二进制数据&#xff0c;最大长度为512MB。尽管它被称为"字符串"&#xff0c;但它实际上可以用于存储多种类型的数据&#xff0c;包括文本、整数、浮点数和二进制数…

在思科(Cisco)路由器中使用 SNMP

什么是SNMP SNMP&#xff0c;称为简单网络管理协议&#xff0c;被发现可以解决具有复杂网络设备的复杂网络环境&#xff0c;SNMP 使用标准化协议来查询网络上的设备&#xff0c;为网络管理员提供保持网络环境稳定和远离停机所需的重要信息。 为什么要在思科设备中启用SNMP S…

神经网络基础-神经网络补充概念-49-adam优化算法

概念 Adam&#xff08;Adaptive Moment Estimation&#xff09;是一种优化算法&#xff0c;结合了动量梯度下降法和RMSProp的优点&#xff0c;用于在训练神经网络等深度学习模型时自适应地调整学习率。Adam算法在深度学习中广泛应用&#xff0c;通常能够加速收敛并提高模型性能…

基于springboot+vue的论坛系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

机器学习赋能乳腺癌预测:如何使用贝叶斯分级进行精确诊断?

一、引言 乳腺癌是女性最常见的恶性肿瘤之一&#xff0c;也会发生在男性身上。每年全球有数百万人被诊断出乳腺癌&#xff0c;对患者的生活和健康造成了巨大的影响。早期的乳腺癌检测和准确的诊断对于提高治疗的成功率至关重要。然而&#xff0c;乳腺癌的早期诊断面临着许多挑战…

【TypeScript】枚举类型

在 TypeScript 中&#xff0c;枚举&#xff08;Enum&#xff09;是一种用于定义命名常量集合的数据类型。枚举使代码更加可读和可维护&#xff0c;因为它们为一组具有语义的值提供了命名。 以下是 TypeScript 中枚举的基本用法和特点&#xff1a; // 声明一个枚举 enum Direc…

国际刑警组织逮捕 14 名涉嫌盗窃 4000 万美元的网络罪犯

Bleeping Computer 网站披露&#xff0c;4 月份&#xff0c;国际刑警组织发动了一起为期四个月&#xff0c;横跨 25 个非洲国家的执法行动 “Africa Cyber Surge II”&#xff0c;共逮捕 14 名网络犯罪嫌疑人&#xff0c;摧毁 20000 多个从事勒索、网络钓鱼、BEC 和在线诈骗的犯…

ubuntu20.04共享文件夹—— /mnt/hgfs里没有共享文件夹

参考文章&#xff1a;https://blog.csdn.net/Edwinwzy/article/details/129580636 虚拟机启用共享文件夹后&#xff0c;/mnt/hgfs下面为空&#xff0c;使用 vmware-hgfsclient 查看设置的共享文件夹名字也是为空。 解决方法&#xff1a; 1. 重新安装vmware tools. 在菜单…

【高光谱图像的去噪算法】通过全变异最小化对受激拉曼光谱图像进行去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

nginx防盗链

防盗链介绍 通过二次访问&#xff0c;请求头中带有referer&#xff0c;的方式不允许访问静态资源。 我们只希望用户通过反向代理服务器才可以拿到我们的静态资源&#xff0c;不希望别的服务器通过二次请求拿到我们的静态资源。 盗链是指在自己的页面上展示一些并不在自己服务…

Programming abstractions in C阅读笔记:p123-p126

《Programming Abstractions In C》学习第50天&#xff0c;p123-p126&#xff0c;总结如下&#xff1a; 一、技术总结 1.notaion 这也是一个在计算机相关书籍中出现的词&#xff0c;但有时却不是那么好理解&#xff0c;因为它可以指代很多对象&#xff0c;这里做一个记录。示…