✅博客主页:爆打维c-CSDN博客 🐾
🔹分享c语言知识及代码
文章目录
一、atoi函数的简要介绍
1.函数原型
▪️ atoi(ascii to integer)是C语言中的一个库函数,用于将字符串转换为对应的整数。
▪️ 规则是:跳过不可见字符,碰到负号或者数字开始转换,转换到非数字字符为止。
头文件<stdlib.h>
int atoi (const char * str);
原文:
译文:
二、atoi
函数的使用示例
当使用atoi函数将字符串转换为整数时,不同情况会导致不同的结果。以下是一些示例和解释:
💠正数示例:
const char *str1 = "12345";
int num1 = atoi(str1);
// 输出: num1 = 12345
在这个示例中,输入的字符串是一个正数,atoi函数将其转换为对应的整数。
💠负数示例:
const char *str2 = "-9876";
int num2 = atoi(str2);
// 输出: num2 = -9876
在这个示例中,输入的字符串是一个负数,atoi函数将其转换为对应的负整数。
💠带有符号示例:
const char *str3 = "+42";
int num3 = atoi(str3);
// 输出: num3 = 42
在这个示例中,输入的字符串带有正号,atoi函数会忽略正号并将其转换为对应的整数。
💠无效输入示例:
const char *str4 = "12abc";
int num4 = atoi(str4);
// 输出: num4 = 12
在这个示例中,输入的字符串以有效的数字开头,但后面包含了非数字字符。atoi函数会在遇到非数字字符时停止转换,返回之前已转换的数字部分。
大家也可以自己敲代码试验atoi函数的使用:
三、模拟实现atoi
1.思路
有了上述对atoi函数比较清晰的了解,再进行模拟实现就不难了,思路如下
🔸首先判断 字符串是否为空或者空指针,若是则返回0。
🔸跳过空格位
🔸判断字符串的字符是否为正号或负号,若是则记录下符号,并将指针后移一位。
🔸遍历字符串的每个字符,若字符为数字,则将其转换为对应的整数,并累加到结果中。若遇到非数字字符,停止遍历。
🔸根据之前记录的符号,若为负号,则将结果取反。
2.实现代码
int My_atoi(const char*s){
int sign = 1;
//为空或空指针返回 0
if (s == NULL || *s == '\0') {
return 0;
}
//跳过空格
while(*s == ' ') {
s++;
}
//判断符号位
if (*s == '-'||*s=='+') {
if (*s == '-') {
sign = -1;
}
s++;
}
int result = 0; //计算结果
while (*s) {
if (*s > '9' || *s < '0') {
break;
}
else {
//*s = *s - '0';
result = result * 10 +( *s-'0'); //转换为对应的整数,并累加
s++;
}
}
return result*sign;
}
总结:
需要注意的是,atoi
函数的返回值为int
类型。当遇到无效输入或非数字字符时,atoi
函数会返回0。这意味着在处理可能包含无效输入的字符串时,应该注意检查返回值来判断转换是否成功。
另外,需要注意atoi
函数没有处理整数溢出的能力。如果转换的结果超出了int
类型的范围,将导致结果不准确。为了处理溢出情况,可以考虑使用更强大的函数,如strtol
函数,它提供了更多的错误处理和转换控制选项。