【无标题】字符串转换整数

将一个字符串转换为整数。面对这样一个问题,相信很多人能在短时间内写出如下不到10行的代码:

int StrToInt(char *string)
{
	 int num = 0;
	 while(*string != 0)
	  {
		num = num*10+*string - '0';
		++string;
 	  }
 	  return num;
}

上面的代码虽然能够解决吧字符串转换为整数这个最基本的要求,但是在处理这个问题的时候我们还要想到输入的字符串中有非数字字符和正负号的可能,还要考虑最大的正整数和最小的负整数以及溢出。此外,还应该考虑当输入的字符串无法转换为整数的时候该如何做错误处理。

int MyStrToInt(string str){
    bool negative = false; //适用于没出现正负号默认为正数的情况;
    int ind = 0; //索引;
    long long result = 0;//初始化
    while (ind < str.size() && str[ind] == ' ')
    {//指向第一个非空格字符;
        ind++;
    } 
    if (ind == str.size())
    { //字符串全部为空字符
        return 0;
    }
    
    //正负号判定;
    if (str[ind] == '-')
    { 
        negative = true;
        ind++;
    }
    else if (str[ind] == '+'){
        negative = false;
        ind++;
    }
	//没有到字符串尾且仍然是数字;
    while (ind < str.size() && isdigit(str[ind]))
    { 
        result = result * 10 + str[ind++] - '0';
        //int溢出判定;
        if (result >= 2147483648){ 
            if (negative) return INT_MIN;
            else return INT_MAX;
        }
    }
    //根据flag negative决定返回的是整数还是负数;
    return negative ? result * (-1) : result; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值