atoi将字符装换为数字

伪代码思路:

第一步:检测输入字符串是否为空字符串;

if(str.empty()) return 0;

第二步:

检索有效输入:

int i=0;

while(str[i]==' '&&str[i]!='\0')

i++;

循环后i所在的位置即为有效字符所在的位置。

if(str[i]=='\0')

{return 0};

第三步:检查数字符号:

if(str[i]=='+')正i++

if(str[i]=='-')  负i++

//开始转换;

int max=ox7fffffff //表示最大的int 32字节符号为为0,表示正数;

int min=ox800000000;//表示下届 负数;

long sum =0;

while( str[i]!='\0')

{

if(str[i]>'0'&&str[i]<'9')

{

sum=sum*10+signal*(str[i]-'0');  //字符数字对应相减,其实对应的是它们的码值相减,差值为对应的数值之差;

}

esle

 return sum;

//第五步:时刻检测数字是否溢出:

if (sum > max || sum < min)   //溢出处理 
                return sum > 0 ? max : min; 

++i;

}

return sum;

class Solution {
public:
    int myAtoi(string str) {
        if (str.empty())   //空字串 
           return 0; 
         
        //忽略前缀空格 
        int i = 0; 
        while (str[i] != '\0' && str[i] == ' ') 
          ++i; 
           
        if (str[i] == '\0') 
          return 0; 
         
        int max = 0x7fffffff; 
        int min = 0x80000000; 
        int signal = 1; 
          
        //处理+、-号 
        if (str[i] == '+') 
        { 
            signal = 1; 
            ++i; 
        } 
        else if (str[i] == '-') 
        { 
            signal = -1; 
            ++i; 
        } 
         
        //转换整数 
        long long sum = 0; 
        while (str[i] != '\0') 
        { 
            if (str[i] >= '0' && str[i] <= '9') 
                 sum = sum * 10 + signal * (str[i] - '0'); 
            else  
                return sum; 
            if (sum > max || sum < min)   //溢出处理 
                return sum > 0 ? max : min; 
            ++i; 
        } 
        return sum; 
    }
};

转载于:https://www.cnblogs.com/mmziscoming/p/5751869.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值