实现一个函数,把一个字符串转换成整数
2017-07-18 10:07
567 查看
剑指offer之“把一个字符串转换成整数”
很多人看到这么简单的面试题目,都是大笔一挥,立马写下洋洋洒洒函数:int StringToInt(char* string){ int num = 0; while(*string!='\0'){ num = num*10 + *string - '0'; string++; } return num; }
仔细想象,面试官又不是傻子,出这么简单的题目肯定不是为了看你这么简单粗暴的实现。醉翁之意不在酒,可能他想考察你的不是你能不能实现这个简单的函数,而是你的编程习惯,包括你是否会在编码前想好测试用例,是否会考虑代码的规范性、完整性和鲁棒性。函数的主要功能实现了,可你有没有考虑边界条件和错误处理?如果string是空指针,程序瞬干爆炸。于是我们面对这种看似简单的题目,应事先想好程序的基本功能、边界条件以及错误处理。然后根据这三个方面去设计测试用例。可能还需要你考虑当字符串长度过长的时候转化成整数int会不会溢出等等。
//基本功能:输入一个正常的“整数”字符串”10086“? //边界条件:输入的字符串为”0“的时候怎么处理? //错误处理:输入的字符串为空指针的时候怎么处理,不是含有非数字的字符串又怎么处理? int nullFlag = 0; int illegalFlag = 0; int StringToInt(char* string){ int num = 0; char* temp = string; //如果是空指针,将nullFlag赋为1,函数返回0 if(string == NULL){ nullFlag = 1; return 0; } //如果有其他字符,将illegalFlag赋为1,函数返回0 while(*temp<'0' || *temp>'9'){ illegalFlag=1; temp++; return 0; } while(*string!='\0'){ num = num*10 + *string - '0'; string++; } return num; }
针对上面考虑到的问题改进了程序,加了边界条件判断以及错误处理,但是还是没有考虑全面,就像上面说的还有字符串长度过长等问题。但你能实现基本功能,判断边界条件以及错误处理。并在编码前能想好测试用例,我相信面试官一定会对你刮目相看,除非你遇到了一个假的面试官。
相关文章推荐
- 【C语言】【笔试题】实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- 【C语言】【笔试题】实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- 输入一个表示整数的字符串,把该字符串转换成整数并输出(实现atoi函数功能)
- //实现一个atoi的函数,atoi是将字符串转换成整数
- 实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- 【剑指offer】C语言:实现函数可以将一个字符串转换为对应的整数,如+1234输出1234
- 【C语言】【笔试题】实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- 实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数
- 实现一个函数stringToInt,实现把字符串转换成整数这个功能
- 实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数
- 【剑指offer】C语言:实现函数可以将一个字符串转换为对应的整数,如+1234输出1234
- 实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数
- 实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。
- 实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数
- 字符串包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数
- 编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数,负整数)
- 为下面的函数原型编写函数定义: int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。如果字符串参数
- 字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。如果字符串参数包含了任何非数字字符,函数就返回零
- 为函数原型编写函数定义:int my_atoi(char *str);(将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数))
- 编写一个函数将一个十六进制数的字符串参数转换成整数返回