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; 
    }
};

posted @ 2016-08-09 09:46  maxandhchen  阅读(485)  评论(0编辑  收藏  举报