C语言--atoi函数详解及模拟实现
作者:小教学发布时间:2023-10-01分类:程序开发学习浏览:79
导读:本篇概要本篇博客主要讲述atoi函数的定义,用法及模拟实现。文章目录本篇概要1.atoi函数简介2.atoi函数的原型及参数3.atoi函数的使用举例4.a...
本篇概要
本篇博客主要讲述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函数。
- 上一篇:消息队列-RabbitMQ(二)
- 下一篇:毛玻璃态卡片悬停效果
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 6鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 7鸿蒙HarmonyOS实战-ArkUI组件(GridRow/GridCol)
- 8[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 9鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版