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

i:

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.hqwc.cn/news/76603.html

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

相关文章

如何将图片应用于所有的PPT页面?

问题&#xff1a;如何快速将图片应用到所有PPT页面&#xff1f; 解答&#xff1a;有两种方法可以解决这个问题。第一种用母板。第二种用PPT背景功能。 解决有时候汇报的时候&#xff0c;ppt中背景图片修改不了以及不知道如何查找&#xff0c;今天按照逆向过程进行操作 方法1…

opencv 进阶13-Fisherfaces 人脸识别-函数cv2.face.FisherFaceRecognizer_create()

Fisherfaces 人脸识别 PCA 方法是 EigenFaces 方法的核心&#xff0c;它找到了最大化数据总方差特征的线性组合。不可否认&#xff0c;EigenFaces 是一种非常有效的方法&#xff0c;但是它的缺点在于在操作过程中会损失许多特征信息。 因此&#xff0c;在一些情况下&#xff0c…

接口自动化yaml文件读取与写入

前言 在走进yaml文件之前大家应该都很想知道他是用来干嘛的&#xff1f; 是的是的&#xff0c;他是用来做接口自动化测试的。 我们一起来学习他吧&#xff01;——&#xff08;一定要收藏带走哦❤&#xff09; 1、yaml文件有什么作用呢&#xff1f; ①可作为配置文件使用—…

医疗设备管理软件哪家好?医院设备全生命周期管理要怎么做?

随着医学技术的不断进步&#xff0c;医疗设备变得越来越先进&#xff0c;越来越复杂。因此&#xff0c;医疗设备的管理也变得越来越重要。传统的医疗设备管理方式存在很多问题&#xff0c;比如设备数据难统计、报修方式难统一、巡检维保难规范等。为了解决这些问题&#xff0c;…

银河麒麟服务器v10 sp1 .Net6.0 上传文件错误 access to the path is denied

上一篇&#xff1a;银河麒麟服务器v10 sp1 部署.Net6.0 http https_csdn_aspnet的博客-CSDN博客 .NET 6之前&#xff0c;在Linux服务器上安装 libgdiplus 即可解决&#xff0c;libgdiplus是System.Drawing.Common原生端跨平台实现的主要提供者&#xff0c;是开源mono项目。地址…

低成本无刷高速吹风机单片机方案

高速吹风机的转速一般是普通吹风机的5倍左右。一般来说&#xff0c;吹风机的电机转速一般为2-3万转/分钟&#xff0c;而高速吹风机的电机转速一般为10万转/分钟左右。高转速增加了高风速。一般来说&#xff0c;吹风机的风力只有12-17米/秒&#xff0c;而高速吹风机的风力可以达…

go_并发编程

go并发编程 一、 并发介绍1&#xff0c;进程和线程2&#xff0c;并发和并行3&#xff0c;协程和线程4&#xff0c;goroutine 二、 Goroutine1&#xff0c;使用goroutine1&#xff09;启动单个goroutine2&#xff09;启动多个goroutine 2&#xff0c;goroutine与线程3&#xff0…

开车适合戴什么款式的耳机,适合开车时用的蓝牙耳机推荐

骨传导耳机在运动和户外活动中也有很大的优势。传统耳机因为与耳朵紧密贴合&#xff0c;容易受到汗水和湿气的侵蚀&#xff0c;导致损坏。而骨传导耳机由于不直接接触耳朵&#xff0c;可以避免这个问题&#xff0c;更加耐用可靠。而骨传导耳机的工作原理使得耳朵仍然可以感受到…

BOXTRADE-天启量化分析平台 主要功能介绍

BOXTRADE-天启量化分析平台 主要功能介绍 potato 数学 web 缘起 月晕而风&#xff0c;础润而雨 BOXTRADE-天启量化 欢迎来到天启量化&#xff01;这是一个专注于量化分析的网站。我们致力于为用户提供市场行情技术指标和量化策略分析方面的优质内容和资源。 我们的使命是 做…

CloudCompare——统计滤波

目录 1.统计滤波2.软件实现3.完整操作4.算法源码5.相关代码 本文由CSDN点云侠原创&#xff0c;CloudCompare——统计滤波&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫。 1.统计滤波 算法原理见&#xff1a;PCL 统计滤波器…

【C语言】使用C语言,实现九九乘法表(另附Python、Java、JavaScript实现方式)

文章目录 1. C语言实现1.1 思路1.2 代码实现 3.其他语言实现3.1 Python实现3.2 Java实现3.3 JavaScript实现 1. C语言实现 1.1 思路 九九乘法表图示&#xff1a; 思路如下&#xff1a;定义两层for循环即可实现九九乘法表 一共有9层&#xff0c;所以要定义一个变量i&#xff…

Linux 修改信号的响应方式

修改信号的响应方式 1.signal()方法介绍&#xff1a; 修改信号的响应方式要用到方法signal()。需要引用头文件signal.h。signal()的原型&#xff1a; typedef重命名了一个函数指针的类型&#xff0c;这个指针的类型为指向一个参数为int返回值为void的函数的指针。这个函数指针…