/*
这本书终于进入了最后一章。。太激动了
这里的题目是一个特别寻常普遍的 写atoi 意思是 ASCII to Integer
是面试实例 有很多经典的地方要注意的
需要注意的地方
1 检查是否是空指针
2 如果是空指针 标记一个全局变量来区分 是得到0还是空指针
3 如果是空字符串
4 正符号的问题
5 非法输入的问题
6 边界值的问题
*/
#include<iostream>
#include<cstdio>
using namespace std;
enum Status{valid=0,invalid};
int status=valid;
//一开始觉得 最后计算结果再加符号就可以了。但是 注意正负的最大值是不一样的 所以还是压根开始就判断了保险
long long StrToIntCore(const char * str,bool minus)
{
long long num=0;
int flag= minus? -1 :1;
while(*str!='\0')
{
if(*str>='0' && *str<='9')
{
num=num*10+flag * (*str-'0');
if((!minus && num>0x7FFFFFFF) || (minus && num<(int)0x80000000))//注意这里后面必须是int 才是负数的最小
{
num=0;
break;
}
str++;
}
else
{
num=0;
break;
}
}
if(*str=='\0')
status=valid;
return num;
}
int atoi(const char * str)
{
status=invalid;
long long sum=0;//如果超过了int 就是 sum大于了int的最大值
if(str!=NULL && *str!='\0')//不是空指针 不是空串
{
bool minus_1=false;//负数
if(*str=='+')
str++;
else if(*str=='-')
{
str++;
minus_1=true;
}
if(*str!='\0')
{
sum=StrToIntCore(str,minus_1);
}
}
return (int) sum;
}
int main()
{
char str[100];
while(scanf("%s",str)!=EOF)
{
cout<<atoi(str)<<endl;
}
return 0;
}
剑指offer面试题49atoi函数的编写
最新推荐文章于 2024-05-13 00:39:54 发布