【atoi函数详解】
文章目录
- 一. 什么是atoi函数
- 二. 模拟实现函数atoi
- 三. 总结atoi
一. 什么是atoi函数
atoi函数是将常量字符串转化为整数
int atoi(const char str);*
注意:该函数的返回值为int,所以不能超过int范围,如果数字很大超过就会截断,返回截断后的值即int的最大左右范围值。
举个例子:
#include <stdio.h>
#include <stdlib.h>
int main()
{int ret1 = atoi("-123");int ret2 = atoi("11111111111111111111111");printf("%d\n", ret1);printf("%d\n", ret2);printf("%d\n", INT_MAX);
}
结果表明超过int范围的值结果会截断,截断后值和int最大值一样。
二. 模拟实现函数atoi
上面不理解,没事,看例子——》
例子一:传一个空字符串
例子二:情况二、传一个空指针
例子三:传一个空格加整数的字符串
例子四:传一个整数加字母的字符串
例子五:传一个字母加整数字符串
例子6:传一个负整数
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<ctype.h>int main()
{printf("%d\n", atoi(""));printf("%d\n", atoi(" 123"));printf("%d\n", atoi("123sgsdg"));printf("%d\n", atoi("adgd123"));printf("%d\n", atoi("-123"));return 0;
}
例子一和四都是非法转换,所以模拟实现要先处理这两种情况:
#include <stdio.h>
#include <ctype.h>
#include <limits.h>
enum Status
{VALID,INVALID
};
enum Status status = INVALID;
int my_atoi(const char* str)
{if (str == NULL){return 0;}if (*str == '\0'){return 0;}//空白字符while (isspace(*str)){str++;}int flag = 1;if (*str == '+'){flag = 1;str++;}else if (*str == '-'){flag = -1;str++;}//处理数字字符long long ret = 0;while (isdigit(*str)){ret = ret * 10 + (*str - '0') * flag;if (ret<INT_MIN || ret>INT_MAX){return 0;}str++;}if (*str == '\0'){status = VALID;return (int)ret;}else{return (int)ret;}
}
int main()
{int ret = my_atoi("-123");if (status == VALID)printf("合法转换:%d\n", ret);elseprintf("非法转换:%d\n", ret);return 0;
}
三. 总结atoi
1、该函数首先会丢弃尽可能多的空白字符,直到找到第一个非空白字符,然后,从这个字符开始,取一个可选的初识加号或者减号,后跟尽可能多的十进制数字,并将他们返回一个int类型的数值。
2、若该字符串是在整数的字符后包含其他字符,则这些字符将会被忽略,返回其他字符之前的整数,并且不会对该函数造成任何影响。
3、若该字符串中第一个非空字符序列表示有效的整数,或是一个空指针,或只包含空白字符,则不执行任何转换,并且返回零。
小弟制作不易,劳烦各位兄弟点点小小的关注,谢谢了
相关文章:

【atoi函数详解】
文章目录 一. 什么是atoi函数二. 模拟实现函数atoi三. 总结atoi 一. 什么是atoi函数 atoi函数是将常量字符串转化为整数 int atoi(const char str);* 注意:该函数的返回值为int,所以不能超过int范围,如果数字很大超过就会截断,返…...
字符串左旋 与 字符串旋转结果
字符串左旋 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法1 三步翻转法 要求:abcdef 左旋两个 整体逆序:fedcba左边逆序:cdef ba右边逆序:cdef ab #include<stdio.h> #include<…...

真人现在猫鼠躲猫猫游戏搭建流程:专业思考与深度思考
真人现在猫鼠躲猫猫游戏是种充满乐趣和挑战的团队竞技游戏。本文将从游戏规则设计、场地布置、技术实现和用户体验等方面,深入探讨人现在猫鼠躲猫猫游戏的搭建流程,并结合专业思考与深度思考,为游戏搭建提供全面指导。 一、游戏规则设计&…...

计算机导论实验——Linux基础入门
使用Xshell登录 Linux 主机 linux命令: cd:去哪里 pwd:在哪里 ls:查看当前有什么文件 mkdir:创建新目录 cp:复制 cat:连接或显示文件 rm:删除 mv:用于移动或重命名文件…...

服务运营 |摘要:学术+业界-近期前沿运筹医疗合作精选
推文作者:李舒湉 编者按 本文归纳整理了近期INFORMS Journal on Applied Analytics中的相关业界合作研究。 这些研究成果体现了运筹学在医疗健康领域实践的效果。文中的学术业界合作使用了不同的研究工具。第一篇文章使用仿真模型帮助诊所进行不同拥挤程度下诊所使用…...

基于Dockerfile创建镜像
基于现有镜像创建 1.首先启动一个镜像,在容器里做修改 docker create -it centos:7 /bin/bash #常用选项: -m 说明信息; -a 作者信息; -p 生成过程中停止容器的运行。 2.然后将修改后的容器提交为新的镜像,需要使用…...
架构实战关键知识点
1.维基百科的“系统”定义:https://zh.wikipedia.org/wiki/%E7%B3%BB%E7%B5%B1 2.维基百科的“软件模块”定义:https://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%9 4%E6%A8%A1%E7%B5%84 3.维基百科的“软件组件”定义:https://zh.wikipedia.or…...
M1Mac开启x86_64命令行archlinux虚拟机的最佳实践(qemu)
categories: [Tips] tags: Linux MacOS 写在前面 UTM 虚拟机可以卸载了, 命令行才是永远滴神, M1 MacBook Air 又能再战了! 之前一直用 UTM 的虚拟化开启 x86_64 的 Linux 虚拟机的, 但是我发现 UTM 好像不是必须的, 只要有qemu 就可以了, 下面就看看如何不通过图形界面前端…...

深度神经网络压缩与加速技术
// 深度神经网络是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。深度神经网络是一…...
系统架构设计:11 论湖仓一体架构及其应用
目录 一 湖仓一体(Lakehouse) 1 数据仓库 2 数据湖 3 数据仓库和数据湖 4 湖仓一体(Lakehouse)...

Linux系统编程_文件编程第1天:打开、写入、读取、关闭文件等编程
1. 文件编程概述(399.1) 内容超多: 文件系统原理及访问机制文件在内核中的管理机制什么是文件信息节点inode文件的共享文件权限,各种用户对其权限。。。。。。 应用为王,如: 账单游戏进度配置文件等 关心如…...
scapy构造ND报文
控制报文之:找邻居报文 什么是ND报文 ND报文是指网络中的 Neighbor Discovery(ND)控制报文。Neighbor Discovery 是 IPv6 网络中的一种协议,它用于管理网络节点之间的邻居关系、地址解析、路由缓存维护和自动配置等任务。ND 协议…...

c++设计模式之单例设计模式
💂 个人主页:[pp不会算法v](https://blog.csdn.net/weixin_73548574?spm1011.2415.3001.5343) 🤟 版权: 本文由【pp不会算法^v^】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦…...

App自动化测试环境搭建
目录 1、java jdk安装 2、node.js安装 3、安装模拟器安装 4、Android SDK 安装 5、Appium-Server安装 6、appium客户端安装 7、Appium-Python-Client安装 只做记录和注意点,详细内容不做解释 环境:winappium夜神模拟器python 需要用到的工具&a…...

win10搭建gtest测试环境+vs2019
首先是下载gtest,这个我已经放在了博客上方资源绑定处,这个适用于win10vs版本,关于liunx版本的不能用这个。 或者百度网盘链接: 链接:https://pan.baidu.com/s/15m62KAJ29vNe1mrmAcmehA 提取码:vfxz 下…...

【代码随想录】算法训练营 第二天 第一章 数组 Part 2
977. 有序数组的平方 题目 暴力解法 思路 原地更新所有数组元素为其平方数后,再使用sort函数排序,对vector使用sort函数时,两个参数分别是vector的起始元素和终止元素。 代码 class Solution { public:vector<int> sortedSquares(…...
在深度学习中,累计不同批次的损失估计总体损失
在深度学习中,累计不同批次的损失估计总体损失 在深度学习训练模型的过程中,通常会通过计算不同批次间的损失和,当作模型在这个训练集上的总体损失,这种做法是否具有可行性呢? 什么是总体损失? 总体损失是计算模型在…...

论文导读|八月下旬Operations Research文章精选:定价问题专题
编者按: 在“ Operations Research论文精选”中,我们有主题、有针对性地选择了Operations Research中一些有趣的文章,不仅对文章的内容进行了概括与点评,而且也对文章的结构进行了梳理,旨在激发广大读者的阅读兴…...

(三)Apache log4net™ 手册 -演示
0、引言 在开始本文之前,推荐您首先阅读 Apache log4net™ 手册中有关 介绍 与 配置 的相关内容。本文将通过实践分别为您演示如何使用 Visual Studio 2022 在 .NET Framework 项目和 .NET 项目下配置并使用 Log4Net。 1、为 .NET Framework 项目配置 Log4Net 1.1…...

VScode远程root权限调试
尝试诸多办法无法解决的情况下,允许远程登陆用户直接以root身份登录 编辑sshd_config文件 sudo vim /etc/ssh/sshd_config 激活配置 注释掉PermitRootLogin without-password,即#PermitRootLogin without-password 增加一行:PermitRootLo…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...