atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)

简介: atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)

那么废话不多说,让我们直接开始!!!

我将会以以下三个方面来讲解atoi函数:

1.atoi函数的作用

       先看一下官网对atoi函数的解释:

解释如下:

       参数: str -- 要转换为整数的字符串。

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

即把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。

2.atoi函数的基本使用方法

       我们直接使用实例来进行讲解:(如图)

#include<stdio.h>
#include<stdlib.h>
int main()
{
  char str[] = "-54321";
  int ret = atoi(str);
  printf("%d", ret);
 
  return 0;
}

从上面的例子我们可以看出atoi函数将字符串 “ -54321 ” 转换成了整数 -54321,实现了将字符串直接转换成整型数据的操作,这也就是atoi函数的作用。

但是使用atoi函数还有几点使用细节需要注意:

       atoi函数的使用细节:

       1.使用atoi函数需要包含<stdlib.h>头文件;

       2.当参数位置传入的为NULL指针时会报错,当参数位置传入的为空字符串时,返回值为0;

       3.atoi函数会自动过滤开始时的空白字符;

       4.atoi函数会根据字符串内容自动判断整数的正负;

       5.当字符串的数字大小超过了整型数字的取值范围时,返回时会变为整型数据的最大或最小值;

       6.当字符串中的数字有非10进制字符隔断时,atoi函数会直接返回当前位置前面的数字;

现对第2条、第3条、第5条、第6条进行实例演示:

       第2条:当参数位置传入的为NULL指针时会报错,当参数位置传入的为空字符串时,返回值为0

#include<stdio.h>
#include<stdlib.h>
int main()
{
  char str[] = "241";
  int ret = atoi(NULL);
  printf("%d", ret);
 
  return 0;
}

         

#include<stdio.h>
#include<stdlib.h>
int main()
{
  char str[] = "";
  int ret = atoi(str);
  printf("%d", ret);
 
  return 0;
}

       

       第3条:atoi函数会自动过滤开始时的空白字符

#include<stdio.h>
#include<stdlib.h>
int main()
{
  char str[] = "      -54321";
  int ret = atoi(str);
  printf("%d", ret);
 
  return 0;
}

       第5条:当字符串的数字大小超过了整型数字的取值范围时,返回时会变为整型数据的最大或最小值

#include<stdio.h>
#include<stdlib.h>
int main()
{
  char str[] = "238947283649234";
  int ret = atoi(str);
  printf("%d", ret);
 
  return 0;
}

       第6条:当字符串中的数字有非10进制字符隔断时,atoi函数会直接返回当前位置前面的数字

#include<stdio.h>
#include<stdlib.h>
int main()
{
  char str[] = "-543abc21";
  int ret = atoi(str);
  printf("%d", ret);
 
  return 0;
}

以上我们就了解了atoi函数的基本使用方法。

3.如何自我实现atoi函数

       在自我实现atoi函数之前,让我们来梳理一下实现atoi函数的思路:

(1)我们需要一开始就对参数进行判断,如果是NULL指针,则返回0,如果是空字符串则返回0

(2)然后开始过滤字符串开始时的空白字符

(3)判断字符串中的整型数据是正还是负

(4)开始读取字符串中的整型数据直到遇到第一个非10进制字符

 接下来看一下如何自我实现atoi函数:  

 

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int myAtoi(const char * str)
{
  //判断是否是NULL指针或空白字符串
  if (str == NULL)
    return 0;
  if (str == '\0')
    return 0;
  //过滤空白字符
  while (isspace(*str))
  {
    str++;
  }
  //使用标志flag来判断数字正负
  int flag = 1;
  if (*str == '+')
  {
    flag = 1;
    str++;
  }
  else if (*str == '-')
  {
    flag = -1;
    str++;
  }
  //由于字符串里的数字可能大于int类型的最大值,所以使用long long类型变量记录数据
  long long ret = 0;
  while (*str != '\0')
  {
    //如果是10进制数据
    if (isdigit(*str))
    {
      ret = ret * 10 + (*str - '0') * flag;
      str++;
      if (ret > INT_MAX)
        ret = INT_MAX;
      if (ret < INT_MIN)
        ret = INT_MIN;
    }
    //如果不是10进制数据
    else
    {
      //由于atoi函数返回值为int类型,而刚才定义的变量是long long类型,所以要进行转换
      return (int)ret;
    }
  }
  return (int)ret;
}

上面代码中,每一个关键步骤都进行了解释,可以帮助读者更好的理解代码的实现!


以上就是atoi函数的所有内容了~~~

相关文章
|
10月前
|
人工智能 安全
2026年美赛B题——翻译及建模完整思路
本题要求构建数学模型,对比太空电梯(三座银河港)与传统火箭两种运输方式,优化10万人月球殖民地建设(需1亿吨物资)及运营(年水资源补给)的运输方案,在成本、工期、可靠性与环境影响多目标下寻求最优解,并提出可落地的实施建议。(239字)
850 2
|
C++ Windows
应用程序无法正常启动(0xc0000005)?C++报错0xC0000005如何解决?使命召唤17频频出现闪退,错误代码0xC0000005(0x0)
简介: 本文介绍了Windows应用程序出现错误代码0xc0000005的解决方法,该错误多由C++运行库配置不一致或内存访问越界引起。提供包括统一运行库配置、调试排查及安装Visual C++运行库等解决方案,并附有修复工具下载链接。
2893 1
|
开发工具 git
解决git push时的错误提示:“error: src refspec master does not match any”
8 .如果确认以上都无误但依然出现该提示,则可能需要重新设置跟踪上游(upstream),通过如下命令:
5365 8
|
机器学习/深度学习 人工智能 自然语言处理
一文讲懂大模型推理技术细节
本文介绍了大模型推理在自然语言处理(NLP)领域的原理与应用。大模型推理利用如GPT、BERT等预训练模型,通过深度学习中的Transformer结构和自注意力机制,实现文本分类、情感分析等多种任务。文章提供了使用Hugging Face的Transformers库进行文本分类的示例代码,并展望了大模型推理技术未来的发展潜力。
|
JavaScript 前端开发 编译器
TypeScript 详解之 tsc 命令行编译器
TypeScript 详解之 tsc 命令行编译器
|
算法 SoC
在写PWM风扇驱动之前:如何透过FG信号,获取风扇转速?
本文介绍了如何通过PWM风扇的FG信号线获取风扇转速的方法,包括风扇规格的解读、FG信号的公式推导、软件算法的解析,以及在全志H713平台上实现风扇转速获取的驱动代码示例。
3950 2
在写PWM风扇驱动之前:如何透过FG信号,获取风扇转速?
|
C语言
【C语言】sizeof 关键字详解
`sizeof` 关键字在C语言中用于计算数据类型或变量在内存中占用的字节数。它是一个编译时操作符,对性能没有影响。`sizeof` 可以用于基本数据类型、数组、结构体、指针等,了解和正确使用 `sizeof` 对于内存管理和调试程序非常重要。
1422 2
|
测试技术 API 开发者
.NET单元测试框架大比拼:MSTest、xUnit与NUnit的实战较量与选择指南
【8月更文挑战第28天】单元测试是软件开发中不可或缺的一环,它能够确保代码的质量和稳定性。在.NET生态系统中,MSTest、xUnit和NUnit是最为流行的单元测试框架。本文将对这三种测试框架进行全面解析,并通过示例代码展示它们的基本用法和特点。
2544 8
|
搜索推荐 C语言
深入浅出理解 C 语言中的 qsort 函数
深入浅出理解 C 语言中的 qsort 函数
|
消息中间件 存储 容灾
RabbitMQ的故障恢复与容灾策略
【8月更文第28天】RabbitMQ是一个开源的消息代理软件,它支持多种消息协议,如AMQP(Advanced Message Queuing Protocol)。在实际应用中,为了保证服务的连续性,需要实施一系列的故障恢复与容灾策略。
1157 2

热门文章

最新文章