atoi函数的实现

原创 2015年07月10日 14:00:18

<span style="font-family: Arial, Helvetica, sans-serif;">atoi库函数是在求职面试中常被问到的一个题,我想这是考虑一个程序员对一个问题分析是否全面的一种测试吧。</span>

正确实现atoi函数需要考虑的如下几个问题:

首先是字符串里的字符有效性问题,有效的字符为 0-9以及可能首字母出现-或+的标识

其次是溢出问题

最后还有一个是对错误的处理,看某些实现,是通过指定一个全局变量,来指定错误的类型。下面是参考一些实现,自己写的实现程序,记录下来。

代码如下:

#include <iostream>
using namespace std;

enum Status{kValid = 0, kInvalid};
int g_value = kInvalid;

/**************************************************************************************
*	函数名		:	str2IntCore	
*	函数功能描述:	实现将字符转换成对应十进制数
*	输入参数	:	
*					str待转换的字符串
*					flag ture标识str代表一个负数,false代表一个正数
*	返回值		:	返回0 需要考虑g_value的值,看是否是出错了,否则为str对应的十进制数值
****************************************************************************************/
long long str2IntCore(const char* str, bool flag){
	
	int value = 1;
	int idx = 0;
	long long sum = 0;
	char tmp;
	int i = 0;

	if(flag)
		value = -1;

	while(*(str+i) != '\0'){
		tmp = *(str+i);
		if(tmp > '9' || tmp < '0'){
			return 0;
		}
		sum = (sum*10) + (tmp - '0');   
		if((!flag && sum >= 0x7fffffff)   //溢出判断
			|| (flag && sum <(signed int) 0x80000000)){
			return 0;
		}
		i++;
	}

	if(*(str+i) == '\0')
		g_value = kValid;

	return sum*value;   
}

/**************************************************************************************
*	函数名		:	str2Int	
*	函数功能描述:	对str做异常及正负判断
*	输入参数	:	
*					str待转换的字符串
*	返回值		:	返回0 需要考虑g_value的值,看是否是出错了,否则为str对应的十进制数值
****************************************************************************************/
int str2Int(const char* str){
	
	bool flag = false;
	int value = 0;
	int i = 0;

	if(NULL == str)
		return 0;

	if('+' == *str){
		flag = false;
		i++;
	}
	else if('-' == *str){
		i++;
		flag = true;
	}
		
	value = (int)str2IntCore(str+i, flag);

	return value;
}

int main(){
	
	char *str = "120394";
	int value = str2Int(str);
	cout<<"value is: "<< value <<endl;
	cin.get();
	return 0;
}


相关文章推荐

atoi函数实现

  • 2013年08月24日 21:55
  • 484B
  • 下载

自己实现的atoi函数

  • 2012年03月27日 19:47
  • 362KB
  • 下载

【面试题】剑指Offer-49-模拟实现atoi()函数

题目概述 解题思路 就像本篇博文的题目所介绍的那样 这道题目就是让模拟实现atoi函数 结合库中的atoi函数,我们需要处理的情况有以下几种 各种情况分析 情况1:正常情况,给的字...

C/C++ 实现 atoi 函数

将一段字符串转换为整数数字,最基本的方法就是使用 atoi 函数。如果让我们自己实现一段 atoi 函数,需要注意的细节比较多。原始版本首先想到的就是字符类型之间的差值。可以直接使用字符相减得到差值。...

【练习题】atoi和itoa函数的实现

int atoi (const char * str); //Convert string to integer char * itoa ( int value, char * str, int...

C 标准库 atoi 函数的实现

/* * atoi 是一个解析字符串的一个函数 * 可以将字符串解析为 int 类型 * 解决如下的问题: * 1 空白符 * 2 正号和负号 * 3 进制 * 4 溢出...

尝试实现 atoi和atof函数

手动实现atoi以及atof的功能及思路

atoi()函数实现

atoi()函数的实现方法有很多,

模拟实现atoi、itoa

先来罗列一下所有被转换的字符串可能的形式:" +5623852365223" // 溢出,无效值,ret=0 " +5623" // 正常,ret=5623 "-55...

atoi函数的大概实现【剑指offer】

atoi函数是把字符串转变为整数的函数,例如“123”->123.而且有效输入只能有第一个字符的+,-号和0-9,以下为实现代码 enum Status//标志代码是否有效 {kValid, kIn...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:atoi函数的实现
举报原因:
原因补充:

(最多只允许输入30个字)