剑指offer——面试题49:把字符串转换成整数

剑指offer——面试题49:把字符串转换成整数

Solution1:

代码写的啰嗦,但思路清晰。。LeetCode上有相似的题目并考虑了溢出,可以参考LeetCode8答案

class Solution { //题目没有考虑到溢出的情况,不是很完美呀~但在牛客网上也能AC了~
public:
    int StrToInt(string str) { //1.去掉首尾空格;2.首字符只能是+、-或数字(若是其他字符,return 0;),并用sign标记;3.若首位非正负号,则全部字符应在‘0’-‘9’之间
        if (str.size() == 0) //字符串为空
            return 0;
        string str_copy = str.substr(str.find_first_not_of(' ')); //删掉头部空格
        str_copy = str_copy.erase(str.find_last_not_of(' ') + 1); //删掉尾部空格
        int sign = 1;
        if (str_copy[0] == '-') {
            sign = -1;
            str_copy = str_copy.erase(0, 1);//删掉符号字符
            if (str_copy.size() == 0)
                return 0;
        } else if(str_copy[0] == '+') {
            sign = 1;
            str_copy = str_copy.erase(0, 1);//删掉符号字符
            if(str_copy.size() == 0)
                return 0;
        } else if(str_copy[0] < '0' || str_copy[0] > '9') { //其它非正负号及数字的字符,return 0;
            return 0;
        }
        //到这一步为止得到的字符串是去掉首位空格及符号位的字符串,若该字符串中含有非数字字符,则return 0;
        //否则转化为数字*sign 返回该值。溢出的情况怎么办,题目没说明。。。
        for (int i = 0; i < str_copy.size(); i++) {
            if(str_copy[i] < '0' || str_copy[i] > '9')
                return 0;
        }
        return sign * my_strtoint(str_copy);
    }

    int my_strtoint(string str) {
        int result = 0, base = 1, len_str = 0;
        while(str != "") {
            len_str = str.size();
            result += (str[len_str-1] - '0') * base;
            base *= 10;
            str.erase(len_str - 1);
        }
        return result;
    }
};

你可能感兴趣的:(剑指offer题目笔记)