引言
在C/C++编程中,atoi
(ASCII to Integer)是一个常用的库函数,用于将字符串转换为整数。虽然标准库提供了这个函数,但理解其内部实现原理对于提升编程能力非常有帮助。本文将带你一步步实现自己的atoi
函数,并讨论其中的各种边界情况和处理技巧。
1. atoi 函数的基本功能
标准atoi
函数的功能是:
- 解析字符串中的数字字符,跳过前导空白字符
- 识别可选的
+
或-
符号 - 遇到第一个非数字字符时停止转换
- 返回转换后的整数值
2. 基础实现版本
#include<stdio.h>
#include<assert.h>
int my_atoi(char* p)
{
assert(p); //断言
int ret = 0; //存放返回值
int sign = 1; //默认符号是正数
while (*p == ' ')
{
p++;//跳过空白字符
}
if (*p == '+' || *p == '-')
{
sign = (*p) == '+' ? 1 : -1; //确定符号
p++;
}
while (*p>='0' && *p <='9')
{
ret = ret * 10 + *p - '0';
p++;
}
return ret*sign;
}
int main()
{
char arr[20] = " -123 ab 456";
int k = my_atoi(arr);
printf("%d", k); //测试结果 为-123 正确
return 0;
}
结语:
“你在实际项目中是否遇到过因 atoi
的陷阱导致的 Bug?或者你有更优雅的实现方式?欢迎留言交流!
如果觉得这篇博客有帮助,可以点赞或分享给更多开发者~”