您的位置:首页 > 其它

模拟实现atoi

2017-06-03 22:00 274 查看
//注意到细节问题:
/*
一、函数参数
1、形参虚const修饰
2、注意对形参指针判空
二、需要考虑到的细节
1、负数和0(注意区别传入字符‘0’和异常时返回值)
2、空字符串
3、溢出问题
4、输入字符串非非数字字符
*/
int G_flag =0;//区别空串
long long strToDig(const char*digit, bool minus)
{
long long num = 0;
if (*digit == '\0')
{
G_flag = 1;//区别空串
cout << "空字符串" << endl;
}
while (*digit != '\0')
{
if ('0'<=*digit&&*digit<'9')
{
int flag = minus ? -1 : 1;
num = num * 10 + flag*(*digit - '0');
if (!minus&&num>0x7FFFFFFF ||minus&&num<(signed)0x80000000)//若前面有没“-”号,则minus为false;!minus即可判断
{
cout << "转换整数溢出" << endl;
num = 0;
break;
}
digit++;
}
else
{
num = 0;
break;
}
}
return num;
}
int StrToInt(const char*string)
{
long long num = 0;
bool minus = false;
if (string != NULL&&*string != '\0')
{
if (*string == '+')
string++;
else if (*string == '-')
{
minus = true;
string++;
}
}
//开始转换;
if (string != '\0')
{
num = strToDig(string, minus);
}
return (int)num;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: