C语言--atoi函数详解及模拟实现

news2024/11/27 5:24:41

本篇概要

本篇博客主要讲述atoi函数的定义,用法及模拟实现。


文章目录

  • 本篇概要
  • 1.atoi函数简介
  • 2.atoi函数的原型及参数
  • 3.atoi函数的使用举例
  • 4.atoi函数的模拟实现


1.atoi函数简介

atoi() 是 C语言的一个标准库函数,定义在<stdlib.h>头文件中。
atoi() 函数用于将字符串转换为整数。
具体来讲,atoi() 函数首先会丢弃尽可能多的空白字符,直至找到第一个非空白字符,然后从该字符开始,识别 “+”、“-” 以及 0-9之间的十进制数,最后将它们转换成整数。如果构成整数的后面还有其它字符,这些字符将会被忽略。

2.atoi函数的原型及参数

原型:

int atoi(const char *str);

参数: str:指向要转换的字符串。

返回值: 如果转换成功,函数返回转换后的整数。

如果由于 str 为空或者 str 字符串无法转换为整数,函数返回 0。
如果字符串表示的值超出了 int 类型所能表示的整数范围,函数返回的数值是无意义的(垃圾值)。

3.atoi函数的使用举例

int main() 
{
    const char *str1 = "123";
    const char *str2 = "-123abc12"; 
    const char *str3 = "abc"; 
    int value1 = atoi(str1);
    int value2 = atoi(str2);
    int value3 = atoi(str3); 
    printf("Value of str1: %d\n", value1);
    printf("Value of str2: %d\n", value2);
    printf("Value of str3: %d\n", value3); 
    return 0;
}

上述代码将转换三个字符串,前两个包含有效的整数表示,最后一个包含无效表示。通常的结果为:
Value of str1: 123
Valueof str2: -123
Value of str3: 0


4.atoi函数的模拟实现

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int isempty(char* str)
{
    if (str == ' ' ||
        str == '\t' ||
        str == '\n' ||
        str == '\f' ||
        str == '\v' ||
        str == '\r')
    {
        return 1;
    }
    return 0;
}

int isnumber(char* str)
{
    if (str >= '0' && str <= '9')
    {
        return 1;
    }
    return 0;
}

int  my_atoi(char* str)
{
    assert(str != NULL);
    char sign;
    int flag = 0;
    while (isempty(*str)==1)//判断是否为空
    {
        str++;
    }
    sign = *str;
    if (sign == '-' || sign == '+')
    {
        str++;
    }
    while (isnumber(*str) == 1)//判断是否为数字
    {
        flag = 10 * flag + (*str - '0');//在循环过程中,每次处理一个数字字符时,我们需要将其转换成对应的整数值,并将其累加到已经转换好的部分上。
                                        //乘以10的目的是为了将已经转换好的部分向左移动一位,为新的数字字符腾出位置。
        str++;
    }
    return sign == '-' ? -flag : flag;
}


int main()
{
    const char* str1 = "123";
    const char* str2 = "-123abc12";
    const char* str3 = "abc";
    int value1 = my_atoi(str1);
    int value2 = my_atoi(str2);
    int value3 = my_atoi(str3); 
    printf("Value of str1: %d\n", value1);//123
    printf("Value of str2: %d\n", value2);//-123
    printf("Value of str3: %d\n", value3); //0
    return 0;
}

在这里插入图片描述
如图所示,我们实现了atoi函数。

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

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

相关文章

【RocketMQ】基本使用:Java操作RocketMQ(rocketmq-client)

【RocketMQ】基本使用&#xff1a;Java操作RocketMQ&#xff08;rocketmq-client&#xff09; 1.引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.3.2</version>…

公司知识库搭建步骤,知识库建设与运营的四个步骤分享

在知识管理方面&#xff0c;团队中的每一员&#xff0c;都像是一名独行侠&#xff0c;自己的知识&#xff0c;满足自己的需要&#xff0c;这其中&#xff0c;就造成了很多无意义的精力消耗。 公司知识库搭建必要性 比如&#xff0c;一名员工撰写一QA文档&#xff0c;并没有将它…

CDH 6.3.2升级Flink到1.17.1版本

CDH&#xff1a;6.3.2 原来的Flink&#xff1a;1.12 要升级的Flink&#xff1a;1.17.1 操作系统&#xff1a;CentOS Linux 7 一、Flink1.17编译 build.sh文件&#xff1a; #!/bin/bash set -x set -e set -vFLINK_URLsed /^FLINK_URL/!d;s/.*// flink-parcel.properties FLI…

【模板语法+数据绑定+el与data的两种写法+MVVM模型】

模板语法数据绑定el与data的两种写法MVVM模型 1 模板语法1.1 插值语法1.2 指令语法 2 数据绑定2.1 单向数据绑定2.2 双向数据绑定 3 el与data的两种写法4 MVVM模型 1 模板语法 1.1 插值语法 双大括号表达式功能&#xff1a;用于解析标签体内容语法&#xff1a;{{xxx}}&#x…

Postman的高级用法—Runner的使用

1.首先在postman新建要批量运行的接口文件夹&#xff0c;新建一个接口&#xff0c;并设置好全局变量。 2.然后在Test里面设置好要断言的方法 如&#xff1a; tests["Status code is 200"] responseCode.code 200; tests["Response time is less than 10000…

分子相互作用的人工智能

8 分子相互作用的人工智能 正如在第 5、6 和 7 节中所描述的那样&#xff0c;人工智能已经彻底改变了分子学习、蛋白质科学和材料科学领域。尽管已经广泛研究了用于单个分子的人工智能&#xff0c;但分子的物理和生物功能通常是由它们与其他分子的相互作用驱动的。在本节中&am…

iPhone数据丢失怎么办?9 佳免费 iPhone 数据恢复软件可收藏

您是否知道有多种原因可能导致 iPhone 上存储的数据永久丢失&#xff1f;然而&#xff0c;使用一些最好的免费 iPhone 数据恢复软件&#xff0c;您仍然可以恢复它。 由于我们几乎总是保存手机上的所有内容&#xff08;从联系人到媒体文件&#xff09;&#xff0c;因此 iPhone …

MySQL学习笔记27

MySQL主从复制的核心思路&#xff1a; 1、slave必须安装相同版本的mysql数据库软件。 2、master端必须开启二进制日志&#xff0c;slave端必须开启relay log 日志。 3、master主服务器和slave从服务器的server-id号不能一致。 4、slave端配置向master端来同步数据。 master…

【Java 进阶篇】MySQL 数据控制语言(DCL):管理用户权限

MySQL 是一个强大的关系型数据库管理系统&#xff0c;提供了丰富的功能和选项来管理数据库和用户。数据库管理员&#xff08;DBA&#xff09;通常使用数据控制语言&#xff08;Data Control Language&#xff0c;简称 DCL&#xff09;来管理用户的权限和访问。 本文将详细介绍…

基于php+MySql实现简易留言板(超级详细!)

基于phpMySql实现简易留言板&#xff08;超级详细&#xff01;&#xff09; 这篇文章是基于PHP和MySQL实现的一个简易留言板。该留言板具有用户注册、登录、发表留言以及查看留言等功能。首先&#xff0c;用户可以通过注册功能创建自己的账号&#xff0c;然后使用该账号进行登…

WPF 实现点击按钮跳转页面功能

方法1. 配置环境 首先添加prism依赖项&#xff0c;配置好所有文件。需要配置的有两个文件&#xff1a;App.xaml.cs和App.xaml App.xaml.cs using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows;namespace PrismDemo {/// <summa…

Linux 集锦 之 最常用的几个命令

Linux最常用的几个命令 ​ Linux系统中的命令那是相当地丰富&#xff0c;不同的版本可能还有不同的命令&#xff0c;不过Linux核心自带的命令大概有几百个&#xff0c;这个不管是什么发行版一般都是共用的。 ​ 如果希望探索Linux的所有命令&#xff0c;可能不太实际&#xf…

【Unity Build-In管线的SurfaceShader剖析_PBS光照函数】

Unity Build-In管线的SurfaceShader剖析 在Unity Build-In 管线&#xff08;Universal Render Pipeline&#xff09;新建一个Standard Surface Shader文件里的代码如下&#xff1a;选中"MyPBR.Shader"&#xff0c;在Inspector面板&#xff0c;打开"Show generat…

力扣刷题-哈希表-求两个数组的交集

349 求两个数组的交集 题意&#xff1a;给定两个数组&#xff0c;编写一个函数来计算它们的交集。注意&#xff1a;输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 提示&#xff1a; 1 < nums1.length, nums2.length < 1000 0 < nums1[i], …

TensorFlow-Federated简介与安装

1、简介 TensorFlow Federated&#xff08;TFF&#xff09;是一个用于机器学习和其他分布式数据计算的开源框架。TFF 的开发旨在促进联邦学习 &#xff08;FL&#xff09;的开放研究和实验。联邦学习是一种机器学习方法&#xff0c;其中一个共享的全局模型在许多参与的客户之间…

集线器与交换机有什么区别?一文带你了解

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 梦想从未散场&#xff0c;传奇永不落幕&#xff0c;博主会持续更新优质网络知识、Python知识、Linux知识以及各种小技巧&#xff0c;愿你我共同在CSDN进步 目录 一、集线器 1. 集线器是什么&#xff1f; 2. …

高并发时代到底是Go还是Java?

作为一名用过Java和Go开发过微服务架构程序的在校学生的角度思考&#xff0c;本文将从以下几个方便来讲述Go和Java的区别。 前言 小明&#xff1a;听说Go在天然情况下支持并发 小红&#xff1a;我不管Java就是最好的语言 小明&#xff1a;不行&#xff0c;我要学以下神秘的Go…

vue3 element-ui-plus Carousel 跑马灯 的使用 及 踩坑记录

vue3 element-ui-plus Carousel 跑马灯 的踩坑记录 Carousel 跑马灯首页跑马灯demo Carousel 跑马灯 首先&#xff0c;打开其官网-跑马灯案例 跑马灯代码&#xff1a; <el-carousel :interval"5000" arrow"always"><el-carousel-item v-for"…

“智慧时代的引领者:探索人工智能的无限可能性“

目录 一.背景 二.应用 2.1金融领域 2.2医疗领域 2.3教育领域 三.发展 四.总结: 一.背景 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;&#xff0c;是指通过计算机程序模拟人类智能的一种技术。它是计算机科学、工程学、语言学、哲学等多…

Halcon 从基础到精通-01- 基本概念

1 HALCON Architecture 【图一】 HALCON的架构如上&#xff0c;其主要的部分&#xff0c;就是图像处理库。 2 HALCON的基本架构 2.1 Operators HALCON库功能的使用都是通过【operators】操作符来实现的。绝大多数的操作符由多种方法构成&#xff0c;具体可以参考给出的下面…