C语言-atoi函数的使用和实现

atoi是C语言中常见的函数。大家可能对于他不太熟悉,其主要还是因为学校可能没有讲到。其实有很多函数像atol、atof都是一样的,本篇文章以atoi为例,剩余大家如果感兴趣可以再去了解。

目录

1.函数介绍

2.代码演示

3.atoi函数的模拟实现

4.扩展


1.函数介绍

cpp 复制代码
int atoi (const char * str);

功能:

1.解析字符串的内容,将字符串转化成整数

2.atoi的使用需要包含头文件<stdlib.h>

参数:

str:指针,指向了待转化的字符串

返回值:

转化成功的话,返回转化得到的整数,如果是空字符串或者是跳过空白字符后第一个不是数字字符将返回0,如果转化得到数字超出int的取值范围,则是未定义的行为。

2.代码演示

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf("%d\n", atoi(" "));
	printf("%d\n", atoi("	abc"));
	printf("%d\n", atoi("123"));
	printf("%d\n", atoi("		123"));
	printf("%d\n", atoi("		+123"));
	printf("%d\n", atoi("		-123"));
	printf("%d\n", atoi("		-123abc"));
	printf("%d\n", atoi("111111111111111111111111111"));//行为未定义

	return 0;
}

输出结果:VS2022

cpp 复制代码
0
0
123
123
123
-123
-123
2147483647

3.atoi函数的模拟实现

atoi函数的模拟实现可能有些复杂,但一定要理清思路:要先跳过空白字符,再看有无+-,如果有还需考虑最后的符号,用flag记录;同时ret值不能大于最大,也不能小于最小。

cpp 复制代码
int my_atoi(const char* str)
{
	//跳过空白字符
	while (isspace(*str))
		str++;
	//判断正负符号
	int flag = 1;
	if (*str == '+')
	{
		str++;
	}
	else if (*str == '-')
	{
		flag = -1;
		str++;
	}
	//用ret记录值
	long ret = 0;
	while (*str != '\0')
	{
		//判断是否是数字字符
		if (isdigit(*str))
		{
			//转化为整型,如'1'-'0'=1
			ret = ret * 10 + (*str - '0') * flag;
			//最大只能INT_MAX,最小只能INT_MIN
			if (ret > INT_MAX)
			{
				ret = INT_MAX;
			}
			else if (ret < INT_MIN)
			{
				ret = INT_MIN;
			}
		}
		else
			return (int)ret;
		str++;
	}
	return (int)ret;
}

4.扩展

其实还有两个函数可以了解一下:

1.atol:将字符串转换成long类型,转换的范围是比atoi要更大一些。

2.strtol:将字符串转换成long类型,这个函数更加复杂,可以按照各种进制转换。

可以扩展学习一下。

相关推荐
NAGNIP7 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
端平入洛14 小时前
delete又未完全delete
c++
Scout-leaf15 小时前
WPF新手村教程(三)—— 路由事件
c#·wpf
颜酱15 小时前
单调栈:从模板到实战
javascript·后端·算法
用户2986985301418 小时前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版
后端·c#·.net
CoovallyAIHub19 小时前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub19 小时前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub19 小时前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub19 小时前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub19 小时前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉