学习atoi

简介: 然后,从该字符开始,接受一个可选的初始加号或减号,然后跟随尽可能多的十进制数字,并将它们解释为一个数值。④如果字符串str中第一个非空白字符序列不是有效的整数,或者如果不存在这样的序列,因为str为空或只包含空白字符,则不执行转换,并返回零。base-10 digits——十进制数字,即0、1、2、3、4、5、6、7、8、9这10个数字。③字符串可以包含形成整数的字符之后的其他字符,这些字符将被忽略,并不会影响此函数的行为。①解析C字符串str,将其内容解释为整数,并将其作为int类型的值返回。

这是一些c语言的相关单词意思:
简单的来讲就是该函数可以将字符串里面的数字字符转化为整形
打印举例:
反而2 3 4都在说一下特殊案例,
特殊案例就会以举例展示:

特例 1:

include

include

int main()
{
int ret = atoi(" -123");
printf("%d ", ret);
return 0;
}

特例 2:

include

include

int main()
{
int ret = atoi(" 123");
printf("%d ", ret);
return 0;
}

特例 3:

include

include

int main()
{
int ret = atoi(" 123asd");
printf("%d ", ret);
return 0;
}

特例 4:

include

include

int main()
{
int ret = atoi("");//空
printf("%d ", ret);
return 0;
}

特例 5:

include

include

int main()
{
int ret = atoi("NULL");
printf("%d ", ret);
return 0;
}
特例 6:

include

include

int main()
{
int ret = atoi("11111111111111111111111111111111");//33个1,超过了整形int的范围
printf("%d ", ret);
return 0;
}

特例 7:

include

include

int main()
{
int ret = atoi("-11111111111111111111111111111111");//33个1,超过了整形int的范围
printf("%d ", ret);
return 0;
}

那么对应打印信息为:
1:
2:
3:
4:
5:
6:但是在加1还是这个数,因为已经超过了整形范围
7:同6,
了解完后我们就知道了atoi的作用了,为了加深理解在举一个例子:

因为第一个为 ’ ‘,不是有效的整形字符,所以为0;//也就可以说是非法。

atoi的实现
int atoi_my(const char *str)
{
int s=0;
bool falg=false;

while(*str==' ')
{
    str++;
}

if(*str=='-'||*str=='+')
{
    if(*str=='-')
    falg=true;
    str++;
}

while(*str>='0'&&*str<='9')
{
    s=s*10+*str-'0';
    str++;
    if(s<0)
    {
        s=2147483647;
        break;
    }
}
return s*(falg?-1:1);

}

目录
相关文章
|
存储 前端开发 JavaScript
前端实现俄罗斯方块游戏(内含源码)
前端实现俄罗斯方块游戏(内含源码)
662 2
|
6月前
|
存储 容器
红黑树源代码(进阶与细节解释)
看完前两篇的文章,相信对于红黑树有了一定的了解,知道红黑树是怎么样子进行插入的,是怎么样进行查找的,知道了底层是怎么样子的,知道了其与AVL树,二叉搜索树有什么区别了。但是对于set,map的底层又全是红黑树,set与map的区别就是其键值对一个是k,k型,一个是k,v型的,所以就有了封装,(对于封装后面会讲解什么是封装)二者底层全是同一份的红黑树,但是前面两篇文章的红黑树要不只能使用与k,k型,要不就是k,v型,所以就要对红黑树的源代码进行修改,进行细节上的修饰与进阶。
69 0
|
6月前
|
前端开发 JavaScript 安全
解锁React Server Components:彻底改变前端渲染方式
解锁React Server Components:彻底改变前端渲染方式
|
6月前
|
存储 JSON 前端开发
菜鸟之路Day39一一登录
本文介绍了登录功能的实现及其相关技术细节,包括会话管理、令牌认证和异常处理等内容。作者通过 Java 实现了一个基于用户名和密码的登录接口,调用服务层和数据库层完成用户验证。同时,文章深入探讨了三种会话跟踪技术:Cookie、Session 和 JWT 令牌。 在 JWT 部分,详细讲解了其生成与校验流程,实现了登录成功后返回 JWT 令牌的功能。此外,文章还介绍了过滤器(Filter)和拦截器(Interceptor)的概念及应用,演示了如何利用它们实现登录校验。 最后,为解决前后端交互中异常响应不统一的问题,定义了一个全局异常处理器 将系统异常以统一的 JSON 格式返回给前端。
180 0
|
6月前
|
存储 DataX C语言
vector与list的简单介绍
vector是表示大小可以变化的数组的序列容器。就像数组一样,vector对其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,并且与数组中的元素一样高效。但与数组不同的是,它们的大小可以动态变化,它们的存储由容器自动处理。在内部,vector使用动态分配的数组来存储其元素。当插入新元素时,可能需要重新分配此数组才能增大大小,这意味着分配一个新数组并将所有元素移动到该数组。
272 0
vector与list的简单介绍
|
6月前
|
Linux 编译器 vr&ar
Linux的动态库与静态库
静态库在编译时直接嵌入到最终的可执行文件中。
150 0
|
6月前
|
C++
爱心代码 C++
这段C++代码使用EasyX图形库生成动态爱心图案。程序通过数学公式绘制爱心形状,并以帧动画形式呈现渐变效果。运行时需安装EasyX库,教程链接:http://【EasyX图形库的安装和使用】https://www.bilibili.com/video/BV1Xv4y1p7z1。代码中定义了屏幕尺寸、颜色数组等参数,利用随机数与数学函数生成动态点位,模拟爱心扩散与收缩动画,最终实现流畅的视觉效果。
869 0
|
6月前
|
NoSQL Linux 开发工具
Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
本文介绍了yum 包管理工具、Vim 编辑器、gcc/g++ 编译器、gdb 调试器、编译原理及 Makefile 的使用,同时还配备了如何使用,以及图解。旨在帮助读者更好地理解和应用这些工具与技术。
335 0
|
6月前
|
容器
定长滑动窗口--灵神题单(一刷进阶)
这篇文章主要围绕灵神题单中的定长滑动窗口进阶题进行探讨,首先解决了一些基本题目,然后附带了一些相对困难题目的解题思路。值得注意的是,大部分解答都是在前人的基础上进行了一些小的修改和调整。希望文章对大家的学习和解题能力有所帮助。 如果您需要更具体的内容或者对某一部分有兴趣深入讨论,请告诉我!
117 0
|
6月前
|
存储 算法 安全
c++模板进阶操作——非类型模板参数、模板的特化以及模板的分离编译
在 C++ 中,仿函数(Functor)是指重载了函数调用运算符()的对象。仿函数可以像普通函数一样被调用,但它们实际上是对象,可以携带状态并具有更多功能。与普通函数相比,仿函数具有更强的灵活性和可扩展性。仿函数通常通过定义一个包含operator()的类来实现。public:// 重载函数调用运算符Add add;// 创建 Add 类的对象// 使用仿函数return 0;
209 0