atoi()函数---使用和模拟实现(详解)

目录

  • 一、前言
  • 二、声明
  • 三、描述
  • 四、参数
  • 五、返回值
  • 六、使用
  • 七、模拟实现

一、前言

在这里插入图片描述

二、声明

int atoi(const char *str)

三、描述

C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)需要包含头文件:<stdlib.h>

四、参数

str – 要转换为整数的字符串。

五、返回值

该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。

六、使用

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{int val;char str[20];strcpy(str, "98993489");val = atoi(str);printf("字符串值 = %s, 整型值 = %d\n", str, val);strcpy(str, "www.com");val = atoi(str);printf("字符串值 = %s, 整型值 = %d\n", str, val);return(0);
}

在这里插入图片描述

七、模拟实现

思路:
1.如果开始遇到了空格 那么需要一直过滤
2. + - 会影响 这个数字 的正负
3. 在这个字符串当中 如果出现了非数字字符 那么就结束转换
4. 如果 转换之后的数字 大于 int 最大值 那么按照最大值算 如果小于最小值 按照最小值算

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<ctype.h>
#include<assert.h>
enum State//判断是否是合法转化
{VALLD,//合法INVALLD//非法
}state=INVALLD;
int my_atoi(const char* str)
{assert(*str!=NULL);if(*str == '\0'){//空字符串返回0return 0;}if (isspace(*str))//返回值不为0,代表是空格{str++;}//到这里str后面就一定不是空格了int flag = 1;if (*str == '+'){flag = 1;str++;}else if(*str == '-'){flag = -1;str++;}//需要把字符串中所有的字符串全部判断一遍long long ret = 0;while (*str != '\0'){if (isdigit(*str)){//是数字字符 把字符1转换为数字1——》 ’1‘-’0‘=1ret = ret*10 + (*str - '0') * flag;if (ret > INT_MAX){ret = INT_MAX;}if (ret < INT_MIN){ret = INT_MIN;}}else{// 不是数字字符return (int)ret;}str++;}if (*str == '\0'){state = VALLD;}return (int)ret;
}
int main()
{int val;char str[20];strcpy(str, "98993489");val = atoi(str);printf("字符串值 = %s, 整型值 = %d\n", str, val);strcpy(str, "www.com");val = atoi(str);printf("字符串值 = %s, 整型值 = %d\n", str, val);int num=my_atoi("123");if (state == VALLD){printf("合法转化:%d\n", num);}else{printf("不合法转化:%d\n", num);}return 0;
}

运行结果:
在这里插入图片描述

在这里插入图片描述
欧耶!!!我学会啦!!!!

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

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

相关文章

大语言模型基石:文字与数字的起源与演变

大语言模型基石&#xff1a;文字与数字的起源与演变 1、文字 1.1、起源 我们的祖先在还没有发明文字和语言之前就已经开始使用“咿咿呀呀”的声音来传播信息了&#xff0c;比如在野外活动遇到危险&#xff0c;然后发出“咿咿呀呀”的声音来提醒同伴小心&#xff0c;同伴在接收…

考古:IT架构演进之IOE架构

考古&#xff1a;IT架构演进之IOE架构 IOE架构&#xff08;IBM, Oracle, EMC&#xff09;出现在20世纪末至21世纪初&#xff0c;是一种典型的集中式架构体系。在这个阶段&#xff0c;企业的关键业务系统往往依赖于IBM的小型机&#xff08;后来还包括大型机&#xff09;、Oracle…

基于SpringBoot+Vue的儿童书法机构管理系统

一、项目背景介绍&#xff1a; 儿童书法机构的管理是一个具有挑战性的任务&#xff0c;需要有效的信息管理和资源分配。传统的手动管理方式存在着效率低下、易出错等问题。为了解决这些问题&#xff0c;基于SpringBootVue的儿童书法机构管理系统应运而生。该系统利用现代化的技…

Linux--进程(2)

目录 前言 1. 进程的状态 1.1 进程排队 1.2 运行&#xff0c;阻塞&#xff0c;挂起 2.Linux下具体的进程状态 2.1僵尸和孤儿 3.进程的优先级 4.Linux的调度与切换 前言 这篇继续来学习进程的其它知识 上篇文章&#xff1a;Linux--进程&#xff08;1&#xff09;-CS…

ES12 学习

文章目录 1. 逻辑赋值操作符2. 数字分隔符_3. replaceAll4. Promise.any5. WeakRefs6. FinalizationRegistry 1. 逻辑赋值操作符 逻辑赋值操作符 ??、&&、|| let a true let b true a && b // a a && b a || b // a a || b obj.introduction ?…

37.ABA问题

变量初始值为A&#xff0c;修改成B,通过AtomicReference的compareAndSet去改变。就会先比较原来的值是否为A&#xff0c;如果为A则修改成功&#xff0c;否则修改失败。 但是如果在这个过程中&#xff0c;A变成D然后又变成A, 那么再调用compareAndSet去改变也能修改成功B。这个…

Redis -- 缓存击穿问题

缓存击穿问题也叫热点Key问题&#xff0c;就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了&#xff0c;无数的请求访问会在瞬间给数据库带来巨大的冲击。 常见的解决方案有两种&#xff1a; 互斥锁 逻辑过期 逻辑分析&#xff1a;假设线程1在查询缓存之后&…

【Leetcode 347】,前k个高频元素,小根堆的调整

参考题解 题目&#xff1a;给定一个数组&#xff0c;输出 前k个高频元素。 思路&#xff1a; 遍历数组&#xff0c;建立小根堆&#xff08;小根堆的元素是元组&#xff08;num,freq&#xff09;&#xff0c;排序规则是每个元素的频率&#xff09;。 下面使用数组‘heap’&…

静态路由协议实验1

要求&#xff1a; 使用静态路由协议使得全网可达。 第一步、规划IP地址。并配置IP。 第二步、写静态路由 [r1]ip route-static 192.168.3.0 24 192.168.2.2 [r1]ip route-static 192.168.4.0 24 192.168.2.2 [r1]ip route-static 192.168.5.0 24 192.168.2.2[r2]ip route-st…

一、next-auth 身份验证凭据-使用电子邮件和密码注册登录

一、next-auth 身份验证凭据-使用电子邮件和密码注册登录 文章目录 一、next-auth 身份验证凭据-使用电子邮件和密码注册登录一、前言二、前置准备1、环境配置2、相关库安装&#xff08;1&#xff09;vercel 配置&#xff08;2&#xff09;Yarn 包管理配置 3、next项目初始化与…

【Oracle】oracle、mysql、sql server三者区别

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Oracle》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识…

并查集(基础+带权以及可撤销并查集后期更新)

并查集 并查集是一种图形数据结构&#xff0c;用于存储图中结点的连通关系。 每个结点有一个父亲&#xff0c;可以理解为“一只伸出去的手”&#xff0c;会指向另一个点&#xff0c;初始时指向自己。一个点的根节点是该点的父亲的父亲的..的父亲&#xff0c;直到某个点的父亲…

Shell脚本之基础-2

目录 一、字符处理 cut命令 awk命令 sed命令 字符串排序 二、条件判断 文件类型判断 文件权限判断 两个文件的判断 整数比较 字符串判断 多重判断 三、流程控制 if分支 if else 双分支结构 case分支 for循环 while循环 一、字符处理 cut命令 命令格式&#x…

Linux下I2C设备驱动:I2C设备和驱动匹配过程

一. 简介 Linux 内核也将 I2C 驱动分为两部分&#xff1a; (1) I2C 总线驱动&#xff0c; I2C 总线驱动就是 SOC 的 I2C 控制器驱动&#xff0c;也叫做 I2C 适配器驱动。 (2) I2C 设备驱动&#xff0c; I2C 设备驱动就是针对具体的 I2C 设备而编写的驱动。 本文来学习一下…

深入剖析JavaScript中的this(下)

五、事件处理函数的this 5.1 事件绑定 <button id"btn">点击我</button>function handleClick(e) {console.log(this);// <button id"btn">点击我</button> }document.getElementById(btn).addEventListener(click, handleClick…

CSS基础:4种简单选择器的详解

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 261篇原创内容-公众号 后台回复“前端工具”可获取开发工具&#xff0c;持续更新中 后台回复“前端基础…

MySQL客户端安装并配置免密登录

最近在写脚本时需要向MySQL数据库中存储数据&#xff0c;且脚本运行的服务器与MySQL服务器不是同一台服务器&#xff0c;而且需要保证MySQL密码的安全性&#xff0c;不能在脚本中暴露&#xff0c;所以就需要在服务器上安装MySQL客户端&#xff0c;并配置免密登录。 一、虚拟机…

Git安装教程(图文安装)

Git Bash是git(版本管理器)中提供的一个命令行工具&#xff0c;外观类似于Windows系统内置的cmd命令行工具。 可以将Git Bash看作是一个终端模拟器&#xff0c;它提供了类似于Linux和Unix系统下Bash Shell环境的功能。通过Git Bash&#xff0c;用户可以在Windows系统中运行基于…

顺序表的动态实现

文章目录 静态顺序表和动态顺序表的异同动态顺序表的实现头文件定义结构体初始化打印顺序表 实现增删查改尾插头插尾删头删删掉某个位置的数据在某个位置插入数据查找某个位置的下标修改某个位置的数据扩容销毁顺序表 静态顺序表和动态顺序表的异同 相同: 内存空间连续&#xf…

Vue项目登录页实现获取短信验证码的功能

之前我们写过不需要调后端接口就获取验证码的方法,具体看《无需后端接口,用原生js轻松实现验证码》这个文章。现在我们管理后台有个需求,就是登录页面需要获取验证码,用户可以输入验证码后进行登录。效果如下,当我点击获取验证码后能获取短信验证码: 这里在用户点击获取…