今日刷题之自写my_atoi函数C语言实现

8 篇文章 0 订阅
7 篇文章 0 订阅

目录

1.atoi函数思路实现

2.函数解释

3.atoi代码实现

 4.核心表达式解释

 5.const问题

1.atoi函数思路实现

1)如果参数字符串以数字开头,则一直往后读,直到读到非数字字符或\0。然后将这些数字以整数形式返回。如:“62562hja”,返回整数62562。“1331”,返回整数1331。

(2)如果参数字符串以正负号开头,则往后读取,如果紧接着读到数字,此时与(1)相同。只是在返回整数时要加正负号。如果正负号后面不是数字字符,则返回0。如:“ + 4245sja”,返回4245。“ - 463hsda”,返回 - 463。“ - gab”和“ + hakjs”返回0。

(3)如果参数字符串以空格字符开头(\n, \r, \t, \f, \v),则跳过空格字符,再按照(1)和(2)进行判断。如:“ 425jhad”,返回425。

(4)如果不是以上的三种情况,则返回0。如“jajs4676”, “jsab”,均返回0。

2.函数解释

1)isspace函数

函数描述

C 库函数 int isspace(int c) 检查所传的字符是否是空白字符。

参数

  • c -- 这是要检查的字符。

返回值

如果 c 是一个空白字符,则该函数返回非零值(true),否则返回 0(false)。

空白字符包括:

' '     (0x20)    space (SPC) 空格符
'\t'    (0x09)    horizontal tab (TAB) 水平制表符    
'\n'    (0x0a)    newline (LF) 换行符
'\v'    (0x0b)    vertical tab (VT) 垂直制表符
'\f'    (0x0c)    feed (FF) 换页符
'\r'    (0x0d)    carriage return (CR) 回车符

3.atoi代码实现

#include<stdio.h>
#include<assert.h>
int my_atoi(const char* arr)//传字符数组退化为指针
{
	int res=0;//存放结果
	int flag = 1;//标志正负号,正号则flag=1,负号flag=-1,最后的结果要乘flag
	//判空操作
	assert(arr != NULL);
	if (arr == NULL)
	{
		printf("arr is emmpty\n");
		return 0;
	}
	//跳过空格字符
	while (isspace(*arr))//isspace是判断空格的函数,是空格返回非0,不是返回0
	{
		arr++;
	}
	if (*arr == '-')//注意这里是判等==,不是赋值
	{
		flag = -1;
	}
	if (*arr == '+'||*arr=='-')
	{
		arr++;//过了符号位继续往下走
	}
	while (*arr >= '0' && *arr <= '9')//上述思路中第一条
	{
		res = res * 10 + *arr - '0';//*arr-‘0’,可以得到一个0~9之间的正数
		arr++;
	}
	res= res * flag;//这里用到了符号位,所以符号位的判断应放在上面
	return res;
}

int main()
{
	const char  arr[] = "+123";
	const char brr[] = "-1234";
	const char crr[] = "1223";
	const char drr[] = "1234abc";
	const char err[] = "   123abv";
	const char frr[] = "abs 123";
	printf("arr=%d\n", my_atoi(arr));
	printf("brr=%d\n", my_atoi(brr));
	printf("crr=%d\n", my_atoi(crr));
	printf("drr=%d\n", my_atoi(drr));
	printf("err=%d\n", my_atoi(err));
	printf("frr=%d\n", my_atoi(frr));
}

截图展示:

 4.核心表达式解释

	while (*arr >= '0' && *arr <= '9')//上述思路中第一条
	{
		res = res * 10 + *arr - '0';//*arr-‘0’,可以得到一个0~9之间的正数
		arr++;
	}

 5.const问题

字符串常量前必须加canst,所以my_atoi函数传参的时候形参和实参都是const.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在凌晨等太阳¤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值