赞
踩
atoi是C语言中常见的函数。大家可能对于他不太熟悉,其主要还是因为学校可能没有讲到。其实有很多函数像atol、atof都是一样的,本篇文章以atoi为例,剩余大家如果感兴趣可以再去了解。
目录
int atoi (const char * str);
功能:
1.解析字符串的内容,将字符串转化成整数
2.atoi的使用需要包含头文件<stdlib.h>
参数:
str:指针,指向了待转化的字符串
返回值:
转化成功的话,返回转化得到的整数,如果是空字符串或者是跳过空白字符后第一个不是数字字符将返回0,如果转化得到数字超出int的取值范围,则是未定义的行为。
- #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
- 0
- 0
- 123
- 123
- 123
- -123
- -123
- 2147483647
atoi函数的模拟实现可能有些复杂,但一定要理清思路:要先跳过空白字符,再看有无+-,如果有还需考虑最后的符号,用flag记录;同时ret值不能大于最大,也不能小于最小。
- 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;
- }
其实还有两个函数可以了解一下:
1.atol:将字符串转换成long类型,转换的范围是比atoi要更大一些。
2.strtol:将字符串转换成long类型,这个函数更加复杂,可以按照各种进制转换。
可以扩展学习一下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。