简介:
atoi: 是ASCII to integer 的缩写,是把字符串转换成整型数的一种函数
atol: 是ASCII to long 的缩写,是把字符串转换成长长整型数的一种函数
atoll: 是ASCII to long long 的缩写,是把字符串转换成长长整型数的一种函数
atoq: 是一种废弃的atoll版本, 功能与atoll相似, 因为已经废弃, 本次不参与代码实现
代码实现:
aoti
#include <stdio.h>
/*
* 自己动用实现atoi
* 功能: 将数字字符串转换成×××并返回
* author sea time 2016/06/15
*/
int myatoi(const char* pstr){
//判断指针是否为空
if(NULL == pstr){
return -1;
}
//接收指针值, 不改变形参值
const char* p = pstr;
//保存结束, 并返回
int retval = 0;
//符号, 正数为1, 负数为0
int sign = 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++;
}
//返回结果
return retval * sign;
}
int main(int argc, char* argv[]){
//测试结果
char* p = "-123151";
//打印输出
printf("%s = %d\n", p, myatoi(p));
return 0;
}
由于aoti只能实现结果,int32 范围是: 2147483647 ~ -2147483648, 超出范围会进行溢出运算
atol:
#include <stdio.h>
/*
* 自己动用实现atol
* 功能: 将数字字符串转换成长×××并返回
* author sea time 2016/06/15
*/
long myatol(const char* pstr){
//判断指针是否为空
if(NULL == pstr){
return -1;
}
//接收指针值, 不改变形参值
const char* p = pstr;
//保存结束, 并返回
long retval = 0;
//符号, 正数为1, 负数为0
int sign = 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++;
}
//返回结果
return retval * sign;
}
int main(int argc, char* argv[]){
//测试结果
char* p = "-142222234152654151";
//打印输出结果
printf("%s = %ld\n", p, myatol(p));
return 0;
}
atol的范围-9223372036854775808到9223372036854775807 超出范围会进行溢出运算
atoll:
#include <stdio.h>
/*
* 自己动用实现atoll
* 功能: 将数字字符串转换成长长×××并返回
* author sea time 2016/06/15
*/
long long myatoll(const char* pstr){
//判断指针是否为空
if(NULL == pstr){
return -1;
}
//接收指针值, 不改变形参值
const char* p = pstr;
//保存结束, 并返回
long long retval = 0;
//符号, 正数为1, 负数为0
int sign = 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++;
}
//返回结果
return retval * sign;
}
int main(int argc, char* argv[]){
//测试结果
char* p = "-922337203685477580888";
printf("%s = %lld\n", p, myatoll(p));
return 0;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。