关闭

你会写“atoi”吗???

标签: atoi
3502人阅读 评论(0) 收藏 举报
分类:
分析:
1、如果输入的字符包含不是数字字符的字符???
 例如:“123adc4".
针对这种情况,我们只要加上判断就行了,只要遇到不是数字字符的直接返回。

2、如果在数字字符前面有正负号又该怎么办???
 例如:”-123”、“+123”.
针对这种情况,我们再加上判断,判断字符串的第一个字符是不是正负号,并用一个标记位flag记录正负。

3、当输入的字符串前面几个字符都是空格又该怎么办???
 例:“   -123”,“   +123”.
  针对这种情况,库里面的atoi是将空格跳过再进行判断的,所以我们在一开始就用循环将空格跳过,注意这时候要是字符串里面全部是空格,则我们应该返回一个值,就返回0吧。

4、当输入的字符串中没有数字时,我们应该返回什么呢???
我们在这种情况下返回0.

5、当字符串中的字符数字转化的整数太大,会有可能溢出???
针对这种情况,我们需要做出一个判断,判断转化后的数字当它的范围在long的范围内。

  那么最重要的一个问题来了,当你第3、4中情况下,返回的是0,如果输入“0”返回的也是0,这两个0怎么区分呢???,貌似在这里你把3、4两种情况下的返回值设置成什么都不合适。所以我们可以设置一个全局变量state,来记录是不是正常返回。


#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>



enum State
{
	NORMAL,                        //正常
	ABNORMAL                       //异常
}state;
state = ABNORMAL;                    //将初始状态置为异常
int my_atoi(const  char *src)
{
	assert(src);
	int flag = 1;
	long long ret = 0;
	while (*src==' ')                           //跳过空格
	{
		src++;
	}
	if (*src == '\0')                           //如果这时候字符串已经完了,则直接返回
	{
		return  0;
	}
	if (*src == '+')                            //接下来判断正负
	{
		src++;
	}
	else if (*src == '-')
	{
		flag = -1;
		src++;
	}
	while (*src >= '0'&&*src <= '9')             //读取字符数字转换成整型
	{
		ret = ret * 10 + flag*(*src-'0');
		if (ret >= INT_MAX|| ret <= INT_MIN)          //如果溢出的话直接跳出
		{
			break;
		}
		src++;
	}
	if (*src == '\0')                         //正常返回
		state = NORMAL;                       //将状态置为正常
	return (int)ret;
}
int main()
{
	char arr[50] = { 0 };
	scanf("%s", arr);
	int ret=my_atoi(arr);
	if (state == ABNORMAL)
		printf("异常返回\n");
	printf("%d\n", ret);
	system("pause");
	return 0;
}


1
0
查看评论

细思极恐-你真的会写java吗?

细思极恐-你真的会写java吗? 导语 自2013年毕业后,今年已经是我工作的第4个年头了,总在做java相关的工作,终于有时间坐下来,写一篇关于java写法的一篇文章,来探讨一下如果你真的是一个java程序员,那你真的会写java吗? 笔者是一个务实的程序员,故本文绝非扯淡文章,文中内容都是...
  • sinat_32366329
  • sinat_32366329
  • 2017-03-12 15:18
  • 909

你会写代码注释吗?

你会写代码注释吗,看看诚实的人是如何写代码注释的。/* This is bad. Reaaly bad. Its a really, really bad hack. If youre an employee of  * Intertrode Communication, then Im ...
  • ITLionWoo
  • ITLionWoo
  • 2006-04-18 12:59
  • 1058

你真的会写Java吗?

自2013年毕业后,今年已经是我工作的第4个年头了,总在做java相关的工作,终于有时间坐下来,写一篇关于java写法的一篇文章,来探讨一下如果你真的是一个java程序员,那你真的会写java吗?
  • qq_37267015
  • qq_37267015
  • 2017-12-03 14:21
  • 2035

你会写简历吗?

听了一些老师的讲座,这段时间也在找工作,深有感触,总结了此篇博客。1. 措辞方面“精通”这词少用,要写就写出出一些干货、用数据支撑。 比如:熟练掌握java,写过1W5行代码,做过某某作品,写过智能遍历的程序,解决了工作中的什么问题,提高了效率,全组推广是什么情况。有数据的支持比干巴巴的写精通ja...
  • gqiang3
  • gqiang3
  • 2017-09-03 11:51
  • 379

你会写邮件吗?

邮件是我们日常工作当中一个非常有效的通讯工具。
  • huangyabin001
  • huangyabin001
  • 2015-05-21 23:24
  • 1209

你会写开发文档吗

你会写软件开发文档吗? 如今,软件开发越来越复杂,软件的功能也越来越丰富。而几乎所有成熟的商业软件,都是一个开发团队齐心协力的血汗结晶。“罗马不是一天建成的。”,当我们震撼于Microsoft Windows的惊世巨著的同时,也道听途说了一些微软公司软件工程是如何的完善和规范。...
  • wiseuc_jianghai
  • wiseuc_jianghai
  • 2017-12-25 16:26
  • 91

你真的会写单例模式吗

你真的会写单例模式吗
  • yy304935305
  • yy304935305
  • 2016-04-10 21:08
  • 204

你真的会写java吗?

导语 自2013年毕业后,今年已经是我工作的第4个年头了,总在做java相关的工作,终于有时间坐下来,写一篇关于java写法的一篇文章,来探讨一下如果你真的是一个java程序员,那你真的会写java吗? 笔者是一个务实的程序员,故本文绝非扯淡文章,文中内容都是干货,望读者看后,能有所收获...
  • benxiaohai529
  • benxiaohai529
  • 2018-01-22 14:00
  • 37

你真的会写文章吗?

前言:上午听曹老师分享了写作的一些技巧。曹老师从历史故事讲起到生活故事,每一个故事都是很引人入胜。其实,写作能吸引人,也是从生活中的故事开始的,而那些故事,则是我们写作的基础。下面分享一下我的心得体会。 我们每个人从小学开始,就写简单的文章,到初中开始要求作文字数600,高中作文字数800以上,...
  • a954553391
  • a954553391
  • 2017-10-02 16:03
  • 166

你真的会写单例模式吗?

一个单例模式,竟然有这么多的坑。
  • qq_35952082
  • qq_35952082
  • 2017-02-24 11:23
  • 172
    博客专栏
    文章分类
    最新评论