把字符串转换成整数

该博客讨论了在将字符串转换为整数时,如何通过一个全局变量区分空字符串和字符串'0'的返回值。当遇到非法输入时,会返回0并设置全局变量为特殊标记。正常转换后,全局变量会被重置为0,以此来判断返回值0的来源。
摘要由CSDN通过智能技术生成

注意:

   atoi通过区分一个全局变量来区分当字符串为空的时候返回的0和输入的字符串是“0”的时候返回值的0,如果是非法输入,返回0并把这个全局变量设为一个特殊的标记。如果输入是“0”,则返回0,不会设置全局变量。这样当atio的调用者得到返回值0的时候,可以通过检查全局变量得知输入究竟是非法输入还是字符串“0”所以在下面代码中,如果是正常的转换,输入都是合法的,那么会在最后将这个全局变量置为0,如果产生任何的不和法比如空串和‘\0’那么就会将他置为1

还有一些其他要注意的点都在代码中写了,详细见代码

enum Status{kValid = 0, kInvalid};
int g_nStatus = kValid;
long long StrToIntCore(const char* digit, bool minus)
{
	long long num = 0;
	while(*digit != '\0')  
	{
		if(*digit >= '0' && *digit <= '9')
		{
			//int flag = minus ? -1 : 1;
			//num = num * 10 + flag *(*digit - '0');
			num = num * 10 + (*digit - '0');  //上面两行代码改成这行和下面判断minus的if语句,不然每次都重复执行上面两行代码没什么意思
			//判断是否发生上溢出或者下溢出
			if((!minus && num > 0x7FFFFFFF) || (minus && num < (signed int)0x80000000))
			{
				num = 0; 
				b
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值