美文网首页
把字符串转换成整数

把字符串转换成整数

作者: 李伟13 | 来源:发表于2020-04-27 15:39 被阅读0次

    题目描述

    将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

    输入描述:

    输入一个字符串,包括数字字母符号,可以为空

    输出描述:

    如果是合法的数值表达则返回该数字,否则返回0

    示例

    输入

    +2147483647
    1a33

    输出

    2147483647
    0

    第一想法

    • 将字符串放入栈中.
    • 出栈,看是否是数字,不是直接返回0
    • 使用long long看是否超出范围,超范围返回0

    没能AC的代码

    class Solution {
    public:
        int StrToInt(string str) {
            if(str.size() == 0)
                return 0;
            int i = 0;
            stack<int> st;
            int slogan = 1;
            if(str[i] == '+'){
                slogan = 1;
                i++;
            }
            if(str[i] == '-'){
                slogan = -1;
                i++;
            }
            while(str[i] != '\0'){
                if(str[i] < '0' || str[i] > '9')
                    return 0;
                switch(str[i]){
                    case '0':
                        st.push(0);
                        break;
                    case '1':
                        st.push(1);
                        break;
                    case '2':
                        st.push(2);
                        break;
                    case '3':
                        st.push(3);
                        break;
                    case '4':
                        st.push(4);
                        break;
                    case '5':
                        st.push(5);
                        break;
                    case '6':
                        st.push(6);
                        break;
                    case '7':
                        st.push(7);
                        break;
                    case '8':
                        st.push(8);
                        break;
                    case '9':
                        st.push(9);
                        break;
                }
                i++;
            }
            int b = 0;
            long long num = 0;
            while(!st.empty()){
                num = st.top() * pow(10, b) + num;
                st.pop();
                b++;
            }
            num *= slogan;
            if(num > 2147483647 || num < -2147483648)
                return 0;
            return num;
        }
    };
    

    不能通过的原因是
    用例:
    -2147483649
    对应输出应该为:
    -2147483649
    我就很疑惑,你的返回值要求是int类型,告诉我需要返回-2147483649???这让我怎么AC???

    代码改进

    class Solution {
    public:
        int StrToInt(string str) {
            int len = str.size();
            if(len == 0)
                return 0;
            stack<int> st;
            int slogan = 1;
            int b = 0;
            long long num = 0;
            for(int i = len - 1; i >= 0; --i){
                if(i == 0 && str[0] == '+'){
                    slogan = 1;
                    break;
                }
                if(i == 0 && str[0] == '-'){
                    slogan = -1;
                    break;
                }
                if((str[i] < '0' || str[i] > '9' )&& i != 0)
                    return 0;
                num = (str[i] - '0') * pow(10, b) + num;
                b++;
            }
            num *= slogan;
            if(num > 2147483647 || num < -2147483648)
                return 0;
            return num;
        }
    };
    

    舍去了switch和stack部分

    知识点

    • 转换char字母和数字,只需要'1' - '0',即减去字符0

    相关文章

      网友评论

          本文标题:把字符串转换成整数

          本文链接:https://www.haomeiwen.com/subject/tliywhtx.html