[c语言] 模拟实现c语言库函数atoi

题目:模拟实现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;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值