微软面试题之中的一个,难度系数低。
题目描写叙述例如以下:输入一个表示整数的字符串,把该字符串转换成整数并输出。
比如输入字符串"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 != '