看到一到题目,要自己实现atoi()函数,标准库里的atoi 是这样要求的:
参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零。
而且还得考虑溢出的问题。
我自己尝试了一下,跟网上大神的对比,我的逻辑不够清晰,估计只能自己看得懂。大神用的是C++,除了输入输出函数C不同外,其余代码都兼容C。
先放大神的代码:http://www.cnblogs.com/pangxiaodong/archive/2011/06/17/2083471.html
#include<iostream>
using namespace std;
int my_atoi(const char *str) {
if(str == NULL)
throw "str == NULL!";
enum STATE {STATE_SKIP_SPACE, STATE_RECOGNIZE_SIGN, STATE_RECOGNIZE_NUM,
STATE_RECOGNIZE_LAST_NUM, STATE_RECOGNIZE_TAIL_CHAR};
STATE state = STATE_SKIP_SPACE;
int max = INT_MAX;
int min = INT_MIN;
int bound = max / 10;
int sign = 1;
unsigned int result = 0;
bo