一直在看到说很多人面试被问到atoi的库函数的实现;今天自己也写一个大家一起看看有啥问题,欢迎您提出宝贵的意见,大家相互成长。
#include<iostream>
using namespace std;
#define MAX 123456789
static int Flag=0;
long int atoi_test(const char *tem);
bool isdigit(const char *tem);
int main(void)
{
char str[100];
long int num;
cout<<"in put the str:"<<endl;
while(cin>>str)
{
num=atoi_test(str);
if(0==num && 1==Flag)
cout<<" cannot conver the str to long int!"<<endl;
else
cout<<num<<endl;
}
return 0;
}
long int atoi_test(const char *str)
{
int sign=0;
long int num=0;
Flag=0;
if(NULL!=str)
{
while(' '==*str) str++; //清除' '
if('-'==*str||'+'==*str)//判断是否有'-' '+' 符号
sign=*str++;
while('\0'!=*str)
{
if(isdigit(*str))
{
num = num*10 + *str - '0';
if(num>MAX)
{
num=0;
Flag=1;
break;
}
str++;
}
else
{
Flag=1;
break;
}
}
}
else
Flag=1;
return '-'==sign ? -num : num;
}
bool isdigit (const char *tem)
{
return *tem>='0' && *tem <='9';
}
上面是我写的代码,主要用一个全局变量区别输入 0 与NULL指针时的相同返回值。
还设置了123456789为溢出的MAX。溢出时返回值为0;
下面是我的测试用例:
(其中第一行是输入的字符串,第二行是输出的结果)
( 不能转化出结果,或者溢出的有err提示)