码迷,mamicode.com
首页 > 其他好文 > 详细

将字符串转换成整数(atoi的实现)

时间:2017-02-14 22:31:17      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:将字符串转换成整数   atoi的实现   

思路:
1.‘+’,‘-’问题
2.NULL,‘\0’问题
3.其他字符问题,包括空格、tab
4.越界溢出问题
5.数字前面几位是0

#include<iostream>
using namespace std;
#include<stdlib.h>

enum Status{ KValid = 0, KInvalid }; //KVlid-合法 KInvalid-非法
int g_nStatus = KValid;  //在最后得到结果时,判断是合法的0,还是非法的非0

int StrToInt(const char* str)
{
	long long StrToIntCore(const char *digit, bool minus);
	g_nStatus = KInvalid;
	long long num = 0;

	if (str != NULL&&*str != ‘\0‘)//判空,‘\0‘
	{
		bool minus = false; //符号 默认为负

		if (*str == ‘+‘)
		{
			str++;
		}
		else if (*str == ‘-‘)
		{
			str++;
			minus = true;
		}

		if (*str != ‘\0‘)
		{
			num = StrToIntCore(str, minus);
		}
	}

	return (int)num;
}

long long StrToIntCore(const char *digit, bool minus)
{
	long long num = 0;
	while (*digit != ‘\0‘)
	{
		if (isdigit(*digit)) //while(*digit >= ‘0‘&&*digit <= ‘9‘)
		{
			int flag = minus ? -1 : 1;
			num = num * 10 + flag*(*digit - ‘0‘);

			if ((!minus&&num > 0x7fffffff) || (minus&&num < (signed int)0x80000000))
			{
				num = 0;
				break;
			}

			digit++;
		}
		else
		{
			num++;
			break;
		}
	}

	if (*digit == ‘\0‘)
	{
		g_nStatus = KValid;
	}

	return num;
}

int main()
{
	char str[] = "-12345";
	char str1[] = "-012345";
	char str2[] = "012345";
	char str3[] = "--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");
	return 0;
}

技术分享

将字符串转换成整数(atoi的实现)

标签:将字符串转换成整数   atoi的实现   

原文地址:http://10739786.blog.51cto.com/10729786/1897721

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