码迷,mamicode.com
首页 > 编程语言 > 详细

C/C++--------自己动手实现aoti系列

时间:2016-06-16 00:03:57      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:atoi   atoll   atol   动手达人.   

    简介:

        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;
}


本文出自 “sea” 博客,请务必保留此出处http://lisea.blog.51cto.com/5491873/1789680

C/C++--------自己动手实现aoti系列

标签:atoi   atoll   atol   动手达人.   

原文地址:http://lisea.blog.51cto.com/5491873/1789680

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!