微软面试题之中的一个,难度系数低。
题目描写叙述例如以下:输入一个表示整数的字符串,把该字符串转换成整数并输出。
比如输入字符串"345"。则输出整数345。
逻辑分析:
1、对于面试者来说,遇到这样的题,算是非常幸运的,比起思维灵活度,本题更加注重基础。也就是说,代码的稳定性,健壮性一定要好。对C/C++比較熟悉的读者应该非常快会想到一个函数:atoi,没错。标准库中的atoi就是将字符串转为整数的函数。尽管如此。但却非常少有人尝试去了解atoi这个函数的内部实现,窃以为,atoi的实现,事实上和str*系列函数同等重要。
2、说到稳定性,就要考虑几个easy引起问题的地方。函数模型int atoi(char* str);,那么第一点要考虑的。当然是str是否为空。另外,str中的字符仅仅可能存在三种情况:- | + | [0..9],假设存在其它字符,那么则视为非法字符。最后一点,也是最easy忽略的,要考虑溢出问题。
给出代码:
#include <stdio.h> #include <limits.h> int atoi(char *str) { bool neg = true; char *p = str; int num = 0; if(str == NULL) { printf("字符串为空!你TM是在逗我吗? "); return 0; } if(*p == '-') { p++; neg = false; }else if(*p == '+') { p++; } while(*p != '