编写atoi库函数
看到很多面试书和博客都提到编写atoi函数,在很多面试中面试官都会要求应聘者当场写出atoi函数的实现代码,但基本很少人能写的完全正确,倒不是这道题有多么高深的算法,有多么复杂的数据结构,只因为这道题要考虑的情况比较多,大部分应聘者都没能把所有情况都考虑到,能很好的考察应聘者的编程基本功和思考问题全面性等能力。一看到这道题目我的第一反应是这么简单啊,不就是把一个字符串转化成整数吗?然后速度写下了实现代码,然后测试了下,貌似结果也正确,然后再看了看书和博客上的实现,发现自己很多种情况都没考虑进去,自己测试的也只是自己考虑的一两种情况。
这道题目要考虑的情况还真是很多,比如:如果传的字符串指针为NULL;如果传的字符串为空;如果传的字符串中包含非法的字符;如果传的字符串中包含+-符号;如果字符串代表的整数超过了整数能表示的范围...,看了这么多情况,真心感觉实现这个函数还真不是件简单的事,下面贴出我自己重新写的atoi函数。
int myError = ; int atoi(const char *str)
{
bool is_f = false;
long long result = ; myError = ;
if (str == NULL || *str == )
{
myError = -;
return ;
}
if (*str == '+' || *str == '-')
{
if (*str == '-')
is_f = true;
++str;
if (*str == )
{
myError = -;
return ;
}
}
while (*str)
{
if (!(*str >= '' && *str <= '') ||
(!is_f && result > 0x7fffffff)
|| (is_f && result > 0x80000000))
{
myError = -;
return ;
}
result = result * + (*str - '');
++str;
}
if((!is_f && result > 0x7fffffff)
|| (is_f && result > 0x80000000))
{
myError = -;
return ;
}
return is_f ? -((int)result) : (int)result;
}
上面代码我将出错的代码保存在myError全局变量中,因为如果用返回值来表示出错,这个会与字符串代表的整数值产生混淆。上面的代码自己测试了下貌似对应上面写得各种情况都正确,不过写得代码质量不高,贴出来仅供分享,也许还有没有考虑的情况。
编写atoi库函数的更多相关文章
- 自己用c语言实现字符串处理库函数以及扩展
1.实现基本的c语言库函数: int myStrlen( const char* str);//根据传入的字符串首地址获取字符串长度:返回值为长度 int myStrlen(const char* s ...
- 《C专家编程》第二章——这不是Bug,而是语言特性
无论一门语言有多么流行或多么优秀,它总是存在一些问题,C语言也不例外.本章讨论的重点是C语言本身存在的问题,作者煞费苦心的用一个太空任务和软件的故事开头,也用另一个太空任务和软件的故事结尾,引人入胜. ...
- linux静态库的生成与使用(转)
linux静态库的生成与使用(转) 库是一种软件组件技术,库里面封装了数据和函数. 库的使用可以使程序模块化. Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件). Linu ...
- makefile生成静态库和动态库
库是一种软件组件技术,库里面封装了数据和函数. 库的使用可以使程序模块化. Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件). Linux通常把库文件存放在/usr/lib ...
- objective-c 中的关联介绍
objective-c 中的关联介绍 转载请注明CSDN博客上的出处: http://blog.csdn.net/daiyibo123/article/details/46471993 如何设置关联 ...
- C语言的本质(34)——静态库
库是一种软件组件技术,库里面封装了数据和函数. 库的使用可以使程序模块化. Windows系统包括静态链接库(.lib文件)和动态链接库(.dll文件). Linux通常把库文件存放在/usr/lib ...
- 嵌入式单片机STM32应用技术(课本)
目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...
- linux动态库
1.编写动态库函数接口 gcc -fPIC -shared -o libfunction.so funtion.c 2.写头文件 3.测试 gcc test.c -L. -lfuntion -o ru ...
- C++之语言概述
C++语言是广泛使用的程序设计语言之一,因其特有的优势在计算机应用领域占有重要一席. C语言的发展 20世纪70年代初,贝尔实验室的Dennis Richie 等人在B语言基础上开发出C语言,最初是作 ...
随机推荐
- CICS的几个常用命令
下面是CICS的几个常用命令,仅仅几个我也是刚刚使用CICS,慢慢积累. 1. cicscli /l 是查看启动的客户机守护程序,如果没有启动客户机守护程序,会提示如下信息:CCL8001I CICS ...
- 压缩png质量不改变像素
private static byte[] CompressionImage(Bitmap bitmap, Stream fileStream, long quality) { using (Syst ...
- JavaMail和James的秘密花园
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开发出类似于Micros ...
- 喜马拉雅FM抓包之旅
一.概述 最近学院组织安排大面积实习工作,今天刚刚发布了喜马拉雅FM实习生招聘的面试通知.通知要求:公司采用开放式题目的方式进行筛选,申请的同学须完成如下题目 写程序输出喜马拉雅FM上与"卓 ...
- 使用JavaScript获取日期加随机数生成单号
今天学习Javascript,得到一个自动生成单号的JavaScript,留下日后备用: function getNowFormatDate() { var day = new Date(); var ...
- 华为oj 字符串最后一个单词的长度
<img alt="http://img.bbs.csdn.net/upload/201508/06/1438867109_670158.jpg" src="htt ...
- Microsoft JScript 运行时错误: 属性“$”的值为 null、未定义或不是 Function 对象
运行网站时有的页面中可能有的js代码不起作用,原因可能是 JQ引用错误!他找不到JQ的基类!你引用的是JQ的插件.程序是先找到JQ的基类才能去实现插件功能的.把JQ的基类放在所有插件的前面.这样就不会 ...
- JQM (功能栏、导航条)
在Mobile中导航条的基本结构: <div data-role="navbar"> ul>li>a </div> 其中含有“行(grid)”和 ...
- Form表单中的get和post的区别
method="get/post",两种方式的区别 Form中的get和post方法,在数据传输过程中分别对应了GET和POST方法.二者主要区别如下: 1.Get将表单中数据的按 ...
- 领域驱动设计(DDD)部分核心概念的个人理解
领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...