剑指offer 把字符串转化为整数

题目描述

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

输入描述:

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

输出描述:

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

示例1

输入

+2147483647
    1a33

输出

2147483647
    0

思路:字符串转化为整数的方法num = num *  10 + str[i] - ‘0‘;特殊情况:1、输入字符串为NULL;        2、输入字符串只有+/-;        3、转化的数字大于最大值或小于最小值;        4、输入的字符串有字母。使用一个全局变量进行处理,因为非法情况需要返回0,但是字符串只有0时,也只能返回0,需要使用一个全局变量来进行辨别。全部变量赋值技巧,首先赋值为true,进行程序就需要赋值为false,如果没有进行运算,说明是非法情况1、2,调用函数后,如果是最大最小值退出的情况,全部变量也是false,只有正常处理完字符串遇到\0之后,才能修改全局变量,变为true。
class Solution {
public:
    bool status = false;//false是非法的,true是合法的
    /*1 输入为空
    2 输入含有字母
    3 输入只有+-
    4最大最小值超限
    */
    long long solution(char* str,int minus){
        long long num = 0;
        int i = 0;
        for(i = 0;str[i] != ‘\0‘;++i){
            if(str[i] >= ‘0‘ && str[i] <= ‘9‘){//是数字就计算
                num = num * 10 + str[i] - ‘0‘;
                /*if(minus && num > 0x7FFFFFFF || !minus && -num < (signed int) 0x80000000){
                    num = 0;
                    break;
                }*/
            }
            else{//不是数字就退出
                num = 0;
                break;
            }
        }
        if(str[i] == ‘\0‘){
            status = true;
        }
        return minus == -1 ? -num : num;
    }
    int StrToInt(string str) {
        if(str.size() == 0){
            return 0;
        }
        //find + / -
        status = true;
        int minus = 1;
        char *p = new char(str.size() + 1);
        char * tmp = p;
        strcpy(p,str.c_str());//首先判断是正数还是负数
        if(p[0] == ‘+‘){
            minus = 1;
            ++p;
        }
        if(p[0] == ‘-‘){
            minus = -1;
            ++p;
        }

        int result = 0;//首先初始化为0,如果只有一个+/-那么不会调用函数直接返回0
        if(*p != ‘\0‘){//可以判断只有一个+/-
            result = solution(p,minus);
        }
        delete[] tmp;//删除首地址开始的那一片内存地址。
        return result;
    }
};

delete删除的必须是首地址,因为p已经发生了移位操作不是首地址了,所以需要最开始的保存首地址。

				
时间: 2024-12-08 17:51:51

剑指offer 把字符串转化为整数的相关文章

剑指Offer——把字符串转换成整数

题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入 +2147483647 1a33 输出 2147483647 0 分析: 只可能在最开始一位出现符号,所以我们特殊判断第一位,之后都得是数字字母,不然不合法. 代码: 1 class Solution { 2 public: 3 int StrTo

【剑指offer】字符串转整数

转载请注明出处:http://blog.csdn.net/ns_code/article/details/28015693 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n<=10000000). 输出: 对应每个测试案例,若输入为一个合法的字符串(即代表一个整数),则输出这个整数.若输入为一个非法的字符串,则输出"My God". 样

【剑指offer】字符串的排列

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26390551 题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入: 每个测试案例包括1行. 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 输出: 对应每组数据,按字典序输出所有排列. 样例输入: abc BCA 样例输出:

【剑指offer】字符串的组合

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26405471 剑指offer上的拓展题目,输入一个字符串,输出该字符串的字符的所有组合,比如输入字符串:abc,输出a.b.c.ab.ac.bc.abc. 思路:与上一题类似,也可以用递归求解.可以考虑求长度为n的字符串中m个字符的组合,设为C(n,m).原问题的解即为C(n, 1), C(n, 2),...C(n, n)的总和.对于求C(n, m),从第一个字符开始扫描,每个字符有两种

剑指offer (49) 字符串转数字

class Test { public: Test() : n2(0), n1(n2 + 2) { } private: int n1; int n2; }; 调用构造函数之后,n1个n2各为多少? 分析:构造函数的初始化顺序仅仅取决于成员变量的声明顺序,所以这是 应该是 n1先初始化,然后是n2初始化 当n1初始化值 = n2值 + 2,此时n2并没有初始化,n2为内置类型并且是non-static,所以n2此时为随机值 故 n1 为随机值,n1初始完之后,n2初始化为0 最终 n1为随机值,

[剑指offer]Q11:数值的整数次方

pow(base, exponent) 考虑一下几种情况: base = 0, 那么直接返回0 base = 1, 那么直接返回1 exponent = 0, 那么直接返回1, 注意base= 0 exponent = 1, 那么直接返回 base exponent  为正为负 的情况 主要考察的点是将问题缩减,用折半的思想.这个题细节还是很多的,为了便于验证,leetcode上恰好有这个题,建议在线AC一下. def equal(self, a, b): return abs(a - b) <

剑指offer系列10---数值的整数次方

[题目]给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. * [思路]主要是考虑幂的正负数以及等于0三种情况.但是在处理的时候要考虑细致,底数等于0时无意义,这时候应该报异常. 下面给出版本一: 1 package com.exe3.offer; 2 3 /** 4 * [题目]给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 5 * [思路]主要是考虑幂的正负数以及等于0

剑指offer 52.字符串 正则表达式匹配

题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式.例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 解题思路 解这题需要把题意仔细研究清楚,反正我试了好多次才明白的.   首先,考虑特殊情况:   1&

剑指offer—替换字符串中空格

题目: 实现一个函数,把字符串中的每个空格替换成"%20".加入输入"we are happy.",则输出"we%20are%20happy.". 时间复杂度为O(n^2) 基本思想:从前往后把字符串中的空格替换成%20. 假设字符串的长度为n,对每个空格字符,需要移动后面O(n)个字符,因此总的时间复杂度为O(n^2). 时间复杂度为O(n) 基本思想:先遍历找出空格总数,并计算出替换之后的字符串的总长度.然后从字符串的后面开始复制和替换. 所