看了很多网上的atoi函数,和库函数测试的结果不尽如人意,所以综合了一些想法和思路,也尝试着实现一下atoi。
首先知道一个问题,就是字符如何隐式的转换为数字:一个char型的字符减去‘0’就会隐式的转换为数字,一个数字加上‘0’则会隐式的转换为字符,明白了这一点,就可以尝试着写atoi了。
首先看函数声明 int atoi(const char* p),这里参数为const类型是只读类型,为了一些const类型参数的转换。
下面是尝试写的myatoi函数,请不吝指正:
int myatoi(const char *p)
{
assert(p!=NULL);
int res =0;
bool negflag = false;
while(*p==' ' || *p == '\t')
p++;
if('+' == *p || '-' == *p)
negflag =(*p++ == '+');
while(isdigit(*p))
res = res*10 + (*p++-'0');
return negflag?(0-res):res;
}
这里加入了对空格,制表符的判断,并且用isdigit判断结束符和非法输入,和库函数atoi的测试对比结果一致,下面进行一下和atoi的对比测试:
int main(in