当前位置: 首页 > news >正文

【C语言】深度讲解 atoi函数 使用方法与模拟实现

文章目录

  • atoi
  • 使用方法:
  • atoi模拟实现

atoi

功能:转化字符串到整数
头文件: #include <stdlib.h>

int atoi (const char * str);

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

返回值

如果转换成功,函数将转换后的整数作为int值返回 , 如果没有执行有效的转换,则返回零。

注意事项

字符串只能转换数字,如字符串包含了数字以外的,则提前返回非数字前的字串

使用方法:

#include<stdio.h>
#include<stdlib.h>
int main()
{char arr[] = "123";int ret = atoi(arr);if (ret == 0){printf("转换失败\n");}else{printf("整型值值= %d\n整型值乘2= %d\n", ret, ret * 2);}system("pause");return 0;
}

最终输出结果为:

整型值 = 123
整型值乘2= 246


atoi模拟实现

注意事项:

  • 判断atoi传过来的参数是否为空指针
  • 判断首字符是否为空格,如有空格将跳过
  • 判断字符串是否为空
  • 判断字串正负
  • 判断是否为数字,如是非数字提前返回非数字前的字串
  • 考虑字串是否为溢出的问题 (大于int或小于int)
  • 判断字串是否非法转换(用一个枚举来判断,起始把字符串判定为非法转换,如转换成功在判定成 成功转换)
#include <ctype.h>  
#include<assert.h>
#include<stdio.h>
#include<stdlib.h>
enum S
{Value,ErrValue //代表非法转换
};
S = ErrValue;
int my_atoi(char* arr)
{//1:判断是否为空指针assert(arr);//2:判断是否为空格while (*arr == ' '){arr++;}//判断字符串是否为空if (*arr == '\0')return 0;//判断正负 flag 为1是正 -1是付int flag = 1;if (*arr == '-'){flag = -1;arr++;}//首字符是否为数字 如果不是数字 就返回0if (!isdigit(*arr))return 0;//使用long long可以接受更长的长度long long n = 0;while (*arr != '\0'){//判断是否为数字//isdigit判断是否为十进制0-9的数字 头文件#include <ctype.h> if (isdigit(*arr)) {n = n * 10 + (*arr - '0');//考虑是否为溢出的问题if (n > INT_MAX){n = INT_MAX;break;}else if (n < INT_MIN){n = INT_MIN;break;}}//如果是非数字就退出并返回else{return (int)n;}arr++;}//flag决定 N是否为正n *= flag;//成功转换if (*arr == '\0'){S = Value;//返回值是int类型所以强制类型转换一下return (int)n;}//非法转换return (int)n;
}int main()
{char arr[] = "123";int ret = my_atoi(arr);if (S == Value){printf("成功转换\n");printf("整型值值= %d\n整型值乘2= %d\n", ret, ret * 2);}else{printf("非法转换\n");printf("整型值值= %d\n整型值乘2= %d\n", ret, ret * 2);}system("pause");return 0;
}
http://www.lryc.cn/news/43376.html

相关文章:

  • HTTPS的加密流程
  • STM32配置读取BMP280气压传感器数据
  • 【Linux】 基础IO——文件(中)
  • 蓝桥杯刷题冲刺 | 倒计时13天
  • MIPI D-PHYv2.5笔记(5) -- 不同的PHY配置方式
  • 【周末闲谈】文心一言,模仿还是超越?
  • 《一“企”谈》 | 「佛山市政」:携手企企通,让采购业务数智化
  • Spark运行架构
  • 基于卷积神经网络CNN的水果分类预测,卷积神经网络水果等级识别
  • Spring Boot 框架总结
  • 【数据结构】第五站:带头双向循环链表
  • Springboot生成二维码
  • “独裁者”何小鹏,再造小鹏汽车
  • 数据结构 | 泛型 | 擦除机制| 泛型的上界
  • C++拷贝构造函数(复制构造函数)详解
  • python学习——多线程
  • SAP 系统中过账码or记账码
  • 【FreeRTOS(一)】FreeRTOS新手入门——初识FreeRTOS
  • Python中 __init__的通俗解释是什么?
  • 网友真实面试总结出的自动化测试面试题库
  • 2023 年最佳 C++ IDE
  • 在Ubuntu上使用VSCode编译MySQL Connector/C连接库
  • 单声道数字音频放大器AD87589
  • 网络的UDP协议和TCP协议
  • 【JaveEE】多线程之阻塞队列(BlockingQueue)
  • 分布式ELK日志监控系统环境搭建
  • 【数据结构刷题集】链表经典习题
  • JavaSE(3.27) 异常
  • 【看门狗】我说的是定时器不是狗啊
  • 24万字智慧城市顶层设计及智慧应用解决方案