实现atoi函数

atoi函数最关键的地方是想好测试用例:

  • 输入为空字符串,输出为0;
  • 输入字符串大小超过INT_MAX输出INT_MAX;
  • 输入字符串大小小于INT_MIN输出INT_MIN;
  • 输入字符串中含有不规则字符,中断atoi, 如"01a4" 输出1;
  • 输入字符串开头和结尾含有空格,忽略空格,如输入"  +01  "输出1;
  • 输入字符串开头除空格以外如果是"+"和"-",视为正确输入。
class Solution {
public:
    int atoi(const char *str) {
        if(strlen(str)==0) return 0;
        double result=0;
        int j=0;
        while(str[j]==' ')  //忽略字符串首空格
        {
            j++;
        }
        int last = strlen(str)-1;
        int last_space = 0;
        while(str[last]==' ') //忽略字符串尾空格
        {
            last--;
            last_space++;
        }
        if(str[j]=='+')
        {
            for(int i=j+1;i<strlen(str)-last_space;i++)
            {
                if(str[i]>='0'&&str[i]<='9')
                {
                    result = result*10 + (str[i]-'0');
                }
                //如果遇到非法字符,终止转换
                else
                {
                    break;
                }
            }
            if(result>INT_MAX)
            {
                return INT_MAX;
            }
            else
            {
                return result;
            }
        }
        if(str[j]=='-')
        {
            for(int i=j+1;i<strlen(str)-last_space;i++)
            {
                if(str[i]>='0'&&str[i]<='9')
                {
                    result = result*10 + (str[i]-'0');
                }
                else
                {
                    break;
                }
            }
            if(result*(-1) < INT_MIN)
            {
                return INT_MIN;
            }
            return result*(-1);
        }
        for(int i=j;i<strlen(str)-last_space;i++)
        {
            if(str[i]>='0'&&str[i]<='9')
            {
                result = result*10 + (str[i]-'0');
            }
            else
            {
                break;
            }
        }
        if(result>INT_MAX)
        {
            return INT_MAX;
        }
        if(result*(-1) < INT_MIN)
        {
            return INT_MIN;
        }
        return result;
    }
};

 

posted on 2014-12-07 23:08  林枫水湾湾  阅读(312)  评论(0编辑  收藏  举报

导航