【c语言】atoi的模拟实现

编程入门 行业动态 更新时间:2024-10-27 14:20:16

【c<a href=https://www.elefans.com/category/jswz/34/1770116.html style=语言】atoi的模拟实现"/>

【c语言】atoi的模拟实现

1.头文件

atoi() 是 C语言的一个标准库函数,定义在<stdlib.h>头文件中

2.atoi的解析

具体来讲,atoi() 函数首先会丢弃尽可能多的空白字符,直至找到第一个非空白字符,然后从该字符开始,识别 “+”、“-” 以及 0-9 之间的十进制数,最后将它们转换成整数。如果构成整数的后面还有其它字符,这些字符将会被忽略。

3.函数申明


参数
string:指向要转换的字符串。
如果由于 str 为空或者 str 字符串无法转换为整数,函数返回 0。

如果字符串表示的值超出了 int 类型所能表示的整数范围,函数返回的数值是int 最大值或最小值。

4.一些转化的例子

1.如果前面有+,转化后+号去掉


2.如果是-号,则保留


3.传入的是空指针


  1. 有空格的话跳过

5.空字符串的转化


6.大于int类型最大值,转化为int类型的最大值


7.小于int类型最小值,转化为int类型的最小值


8.出现整数后面有其他字符截断.


9.先出现其他字符比如a

5.函数实现

1.基本框架

enum State//枚举类型定义转化是否正常
{INVALID,//不正常VALID,//正常}sta= INVALID;//先让其正常
int my_atoi(const char *str)//atoi的具体实现
{}
int main()
{char arr[] = "1234";int ret = my_atoi(arr);//返回转化后的值if (sta == INVALID)//不正常转化{printf("非正常转化-%d",ret);}if (sta == VALID)//正常转化{printf("正常转化-%d", ret);}}

2.处理空指针

int my_atoi(const char *str)//atoi的具体实现
{assert(*str);//处理空指针
}

3.处理空字符串

int my_atoi(const char *str)
{assert(*str);if (*str == '\0')//处理空字符串{                //处理空字符串return 0;    //处理空字符串}}

4.处理空格

int my_atoi(const char *str)
{assert(*str);if (*str == '\0'){return 0;}while (isspace(*str))//处理空格{                    //处理空格str++;            //处理空格}}

5.处理符号位

int my_atoi(const char *str)
{assert(*str);if (*str == '\0'){return 0;}while (isspace(*str)){str++;}int flag = 1;//符号位,如果为1则为正数,如果为-1则为负数,如果没加正号,默认为1;if (*str=='+'){flag = 1;str++;//跳过当前字符}else if (*str == '-'){flag = -1;str++;//跳过当前字符}}

6.处理数字字符

int my_atoi(const char *str)
{assert(*str);if (*str == '\0'){return 0;}while (isspace(*str)){str++;}int flag = 1;if (*str=='+'){flag = 1;str++;}else if (*str == '-'){flag = -1;str++;}
long long r=0;//如果r 为int类型的话,超出范围,可能要截断,这里初始话为0,保证了空字符串返回0while (*str != '\0')//字符还未到末尾{if (isdigit(*str))//判断是否是字符{r = r * 10 + flag*(*str - '0');//得到字符对应的整数if (r > INT_MAX || r < INT_MIN)//如果超出范围{if (flag == 1){return INT_MAX;//超出int 最大值,就返回最大值}if (flag == -1){return INT_MIN;//超出int 最小值,就返回最小值}}str++;//指针移动下一个字符}else{return r;//如果str指向的不是字符的话,就返回r的值,比如1234a,此时r=1234}}}

6.整体代码

#include<stdio.h>
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include<stdlib.h>
enum State
{VALID,INVALID}sta= INVALID;
int my_atoi(const char* str)
{assert(*str);if (*str == '\0'){return 0;}while (isspace(*str)){str++;}int flag = 1;if (*str == '+'){flag = 1;str++;}else if (*str == '-'){flag = -1;str++;}long long r = 0;while (*str != '\0'){if (isdigit(*str)){r = r*10+(*str-'0')*flag;if (r > INT_MAX || r < INT_MIN){if (flag == 1){return INT_MAX;}else if (flag == -1){return INT_MIN;}}str++;}else{return r;}}sta = VALID;return (int)r;}int main()
{char arr[] = "a111";int ret=my_atoi(arr);if (sta == VALID){printf("正常输出%d",ret);}if (sta == INVALID){printf("非正常输出%d",ret);}}

更多推荐

【c语言】atoi的模拟实现

本文发布于:2023-12-06 16:49:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1668202.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语言   atoi

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!