《剑指offer》:[49]把字符串转化成整数

题目:把字符串转换为整数,也就是实现atoi()。

       类似还有itoa(),将整数数转化为字符串,相反的过程。此题虽然简单,但是就像高考一样,简单的题不一定能做对,能做对的不一定能得分。好吧,下面来看看一看应该注意的地方。

易错点:

1、判断字符串是否为 NULL的情况(这是对字符串处理最基本得需要注意的地方)。
2、如何区分字符串为NULL时返回的0还是字符'0' 返回的0
3、'+''-'号也要算合法输入,但是也得注意只有' +''-'号的情况;
4、除了'+''-'号外,'0'到'9'之外的数字也算 非法输入
5、考虑溢出的请款,如果字符串过长,也就是数字过大后会造成 溢出
也许想的还不够周全,但是至少的注意以上的这些情况。
具体实现代码:
#include <iostream>
using namespace std;
enum status{Valid=0,InValid,IsOverFlow};
int InputStatue=Valid; //1.注意输入为NULL;
int StrToIntCore(const char *strr,bool minus)
{
	long long num=0;
	while(*strr!='\0')
	{
		if(*strr>='0' && *strr<='9')//4.输入的字符在0-9之外;
		{
			int flag=minus?-1:1;//判断是正还是负;
			num=num*10+flag*(*strr-'0');
			if(!minus && num>0x7fffffff || minus && num<(signed int)0x80000000)
			//5.判断溢出情况;最大的正数0x7fffffff;最小的负数0x80000000
			{
				InputStatue=IsOverFlow;
				num=0;
				break;
			}
			strr++;
		}
		else
		{
			num=0;
			break;
		}
	}
	if(*strr=='\0')
		InputStatue=Valid;
	return num;
}
int SteToInt(const char *str)
{
	InputStatue=InValid;
	long long num=0;
	if(str!=NULL && str!='\0')
	{
		bool minus=false;//3.+-号的合法性;
		if(*str=='+')//'+'
			str++;
		else if (*str=='-')//'-'
		{
			str++;
			minus=true;
		}
		if(*str!='\0')
			num=StrToIntCore(str,minus);
	}
	return (int)num;//返回的时候转换为int;
}
int main()
{
	char *strg[7]={
		"+453434",
		"-342445353",
		"5345734573487537257834",
		"-5345734573487537257834",
		"",
		"+",
		"0"
	};
	int num[7]={8,8,8,8,8,8,8};


	for(int i=0;i<7;i++)
	{
		num[i]=SteToInt(strg[i]);
		switch(InputStatue)//2.返回0的判断是错误输入还是正常返回;
		{
		case 0:cout<<"the result is:"<<num[i]<<endl;
			break;
		case 1:cout<<"输入的数据有误!"<<endl;
			break;
		case 2:cout<<"数据转换溢出!"<<endl;
			break;
		}
	}


	system("pause");
	return 0;
}

运行结果:


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值