将字符串转换成整数(atoi的实现)
思路:
1.‘+’,‘-’问题
2.NULL,‘\0’问题
3.其他字符问题,包括空格、tab
4.越界溢出问题
5.数字前面几位是0
#include<iostream>usingnamespacestd;#include<stdlib.h>enumStatus{KValid=0,KInvalid};//KVlid-合法KInvalid-非法intg_nStatus=KValid;//在最后得到结果时,判断是合法的0,还是非法的非0intStrToInt(constchar*str){longlongStrToIntCore(constchar*digit,boolminus);g_nStatus=KInvalid;longlongnum=0;if(str!=NULL&&*str!='\0')//判空,'\0'{boolminus=false;//符号默认为负if(*str=='+'){str++;}elseif(*str=='-'){str++;minus=true;}if(*str!='\0'){num=StrToIntCore(str,minus);}}return(int)num;}longlongStrToIntCore(constchar*digit,boolminus){longlongnum=0;while(*digit!='\0'){if(isdigit(*digit))//while(*digit>='0'&&*digit<='9'){intflag=minus?-1:1;num=num*10+flag*(*digit-'0');if((!minus&&num>0x7fffffff)||(minus&&num<(signedint)0x80000000)){num=0;break;}digit++;}else{num++;break;}}if(*digit=='\0'){g_nStatus=KValid;}returnnum;}intmain(){charstr[]="-12345";charstr1[]="-012345";charstr2[]="012345";charstr3[]="--12345";cout<<StrToInt(str)<<endl;cout<<g_nStatus<<endl;cout<<StrToInt(str1)<<endl;cout<<g_nStatus<<endl;cout<<StrToInt(str2)<<endl;cout<<g_nStatus<<endl;cout<<StrToInt(str3)<<endl;cout<<g_nStatus<<endl;system("pause");return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。