C/C++--------自己动手实现aoti系列
简介:
atoi: 是ASCIItointeger的缩写,是把字符串转换成整型数的一种函数
atol: 是ASCIIto long 的缩写,是把字符串转换成长长整型数的一种函数
atoll: 是ASCIItolong long的缩写,是把字符串转换成长长整型数的一种函数
atoq: 是一种废弃的atoll版本, 功能与atoll相似, 因为已经废弃, 本次不参与代码实现
代码实现:
aoti
#include<stdio.h>/**自己动用实现atoi*功能:将数字字符串转换成×××并返回*authorseatime2016/06/15*/intmyatoi(constchar*pstr){//判断指针是否为空if(NULL==pstr){return-1;}//接收指针值,不改变形参值constchar*p=pstr;//保存结束,并返回intretval=0;//符号,正数为1,负数为0intsign=1;//跳过前面的空格while(''==*p){p++;}//判断正负号if('-'==*p){sign=-1;}//如果是符号,指针后移if('-'==*p||'+'==*p){p++;}//while('0'<=*p&&'9'>=*p){//字符0在ascii码中对应的是48,所以需要减字符0//上一次的值乘10,并加上本次的值retval=retval*10+((int)(*p)-'0');//指针后移p++;}//返回结果returnretval*sign;}intmain(intargc,char*argv[]){//测试结果char*p="-123151";//打印输出printf("%s=%d\n",p,myatoi(p));return0;}
由于aoti只能实现结果,int32 范围是: 2147483647 ~ -2147483648, 超出范围会进行溢出运算
atol:
#include<stdio.h>/**自己动用实现atol*功能:将数字字符串转换成长×××并返回*authorseatime2016/06/15*/longmyatol(constchar*pstr){//判断指针是否为空if(NULL==pstr){return-1;}//接收指针值,不改变形参值constchar*p=pstr;//保存结束,并返回longretval=0;//符号,正数为1,负数为0intsign=1;//跳过前面的空格while(''==*p){p++;}//判断正负号if('-'==*p){sign=-1;}//如果是符号,指针后移if('-'==*p||'+'==*p){p++;}//while('0'<=*p&&'9'>=*p){//字符0在ascii码中对应的是48,所以需要减于字符0//上一次的值乘10,并加上本次的值retval=retval*10+((int)(*p)-48);//指针后移p++;}//返回结果returnretval*sign;}intmain(intargc,char*argv[]){//测试结果char*p="-142222234152654151";//打印输出结果printf("%s=%ld\n",p,myatol(p));return0;}
atol的范围-9223372036854775808到9223372036854775807 超出范围会进行溢出运算
atoll:
#include<stdio.h>/**自己动用实现atoll*功能:将数字字符串转换成长长×××并返回*authorseatime2016/06/15*/longlongmyatoll(constchar*pstr){//判断指针是否为空if(NULL==pstr){return-1;}//接收指针值,不改变形参值constchar*p=pstr;//保存结束,并返回longlongretval=0;//符号,正数为1,负数为0intsign=1;//跳过前面的空格while(''==*p){p++;}//判断正负号if('-'==*p){sign=-1;}//如果是符号,指针后移if('-'==*p||'+'==*p){p++;}//while('0'<=*p&&'9'>=*p){//字符0在ascii码中对应的是48,所以需要减于字符0//上一次的值乘10,并加上本次的值retval=retval*10+((int)(*p)-48);//指针后移p++;}//返回结果returnretval*sign;}intmain(intargc,char*argv[]){//测试结果char*p="-922337203685477580888";printf("%s=%lld\n",p,myatoll(p));return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。