题目:模拟实现c语言库函数atoi
思路:模拟实现库函数atoi,要考虑几种特殊情况,1.空格问题 2.符号问题 3.异常(字母)4.数字太大,越界问题。
//使用c语言编写函数,将一个数字字符串转换为对应的数字
//功能类似于库函数的atoi,考虑异常输入
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <ctype.h> //isspace头文件
#include<stdlib.h>
int my_atoi(char const *p)
{
int ret = 0;
int a = 0;
int flag = 1;
assert(p != NULL);
while (isspace(*p)) //isspace判断是否为空格
{
p++;
}
while (*p)
{
if (*p == '+')
p++;
else if (*p == '-')
{
p++;
flag = -1;
}
else if (*p >= '0'&& *p <= '9')
{
a = *p - '0';
ret = (ret * 10 + a);
p++;
}
else
return 0;//遇到输入异常的情况,就返回0,比如带有字母什么的。
}
//正数情况下,ret大于0x7FFFFFFF,或者负数情况下小于0x80000000就返回0
if ((flag == 1 && ret > 0x7FFFFFFF) || (flag == -1 && ret < (signed int)0x80000000))
return 0;
return ret*flag;
}
int main()
{
printf("%d\n", my_atoi(" +2345"));
printf("%d\n", my_atoi(" -2345"));
printf("%d\n", my_atoi("+2345"));
printf("%d\n", my_atoi("-2345"));
printf("%d\n", my_atoi("2345"));
printf("%d\n", my_atoi("2345"));
printf("%d\n", my_atoi(""));
printf("%d\n", my_atoi("123ab"));
system("pause");
return 0;
}