linux中atoi函数的实现 值得借鉴,C语言模拟实现atoi函数的实例详解

C语言模拟实现atoi函数的实例详解

atoi函数,主要功能是将一个字符串转变为整数,例如将“12345”–>12345。但在实现过程中,我们难免会因为考虑不够全面而漏掉比较重要的几点,今天就总结一下实现atoi函数需要注意的地方。

1.指针为NULL

2.字符串为空字符串

3.空白字符

4.正号与负号问题

5.溢出问题

6.异常字符处理

接下来看代码:(具体几种问题处理都在代码的注释中说明)

#define _CRT_SECURE_NO_WARNINGS 1

#include

#include

#include

#include

//定义两个枚举常量来表示状态

enum STATE

{

VALID, //合法

INVALID,//非法

};

enum STATE state = INVALID;

int my_atoi(const char *str)

{

int flag = 1;

long long ret = 0;//定义为比int存储范围还要大的类型,防止后面判断溢出时出错。

//空指针

assert(str);

//空字符串

if (*str == "\0")

{

return 0;

}

//空白字符

while (isspace(*str))//用函数isspace判断是否为空白字符

{

str++;

}

//遇到正负号

if (*str == '-')

{

flag = -1;

str++;

}

if (*str == '+')

{

str++;

}

//

while (*str)

{

//if (*str >= '0'&&*str <= '9')

if (isdigit(*str))//用函数isdigit判断是否为数字字符

{

ret = ret * 10 + flag*(*str - '0');

//判断是否溢出

if (ret > INT_MAX || ret < INT_MIN)

{

return ret;

}

}

//异常字符

else

{

break;

}

str++;

}

state = VALID;

return ret;

}

int main()

{

char *p = "12345";

char *q = " -12345";

int ret = my_atoi(p);

int ret2 = my_atoi(q);

printf("%d\n", ret);

printf("%d\n", ret2);

system("pause");

return 0;

}

运行结果:

0a158d1f234f71dd1b7af5f5219f2cff.png

以上就是C语言模拟实现atoi函数的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2017-08-09

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值