剑指offer 49.综合 把字符串转换成整数

题目描述

将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

输入描述:

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

输出描述:

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

示例1

输入

+2147483647
    1a33

输出

2147483647

0

解题思路

(1先用一个Map<String, Integer>将0-9的数字封装起来,如以“0”为key,以0为value;

(2)将str转化为char[],再遍历该数组,如果char[]中存在一个元素在map中get不到,则表明该str不是一个合法的数值

(3判断str是否是以+或-开头的,如果是则遍历数组时就不是从第0位开始的,而是从第1位开始的,如果是以-开头,后面还要以负数的形式返回

(4)为了避免溢出,最好先用long,最后再转回int

代码如下

public int StrToInt(String str) {
    if (str.equals("")) {
        return 0;
    }
    Map<String, Integer> map=new HashMap<String, Integer>();
    for (int i = 0; i < 10; i++) {
        map.put(String.valueOf(i), i);
    }
    char[] array=str.toCharArray();
    boolean flag=true;
    long result=0;
    int i=0;
    if (String.valueOf(array[0]).equals("+")||String.valueOf(array[0]).equals("-")) i=1;
    for (; i < array.length; i++) {
        if (map.get(String.valueOf(array[i]))==null) {
            flag=false;
            break;
        }else {
            result+=map.get(String.valueOf(array[i]))*Math.pow(10, str.length()-1-i);
        }
    }
    if (!flag) {
        return 0;
    }else {
        if (String.valueOf(array[0]).equals("-")) {
            return (int)(0-result);
        }
        return (int)result;
    }

    }
public static void main(String[] args) {
    StrToInt strToInt=new StrToInt();
    System.out.println(strToInt.StrToInt("36"));
}

原文地址:https://www.cnblogs.com/Transkai/p/11392777.html

时间: 2024-10-09 04:28:32

剑指offer 49.综合 把字符串转换成整数的相关文章

剑指offer之【把字符串转换成整数】

题目: 把字符串转换成整数 链接: https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId=13&tqId=11202&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0

剑指Offer对答如流系列 - 把字符串转换成整数

面试题67:把字符串转换成整数 题目描述 请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不能使用库函数. 问题分析 既然不能使用库函数,那么我们就利用字符的ASCII值,将字符转换成数字,并进行累加. 问题解答 // 标识输入非法 boolean isValid = false; public int strToInt(String str) { if(str == null || str.length()<=0) { return 0; } char[] chars =

170319 剑指offer 1.把一个字符串转化成整数(简单问题的全面性考虑)

工作的时间越长,越感觉基础的重要性,当我们对程序的框架结构越来越熟悉的时候,越会注意这一点,在工作当中,功能的实现是重要的,但是代码的健壮性,重用性,与扩展性确往往更为重要,在学习新技术的同时,我们或许应该抽出一点时间,去思考代码可能出现的问题. 关于剑指offer的这本书,可能所有刚毕业找工作的人,或者准备找工作的人都曾经看过,但是当时我们面对一些东西的时候心情过于浮躁,往往忽视了简单的却又十分重要的环节,(ps:也可能只有我是这样) 面试中一道简单的问题(把一个字符串转化成整数) 可能接触c

剑指offer系列53---字符串转化成整数

[题目]将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数 * []整数(32位)最大值:0X7fff ffff( 0111 1111 1111 1111 1111 1111 1111 1111 (0代表正号)) * 最小值:0x8000 0000( 1000 0000 0000 0000 0000 0000 0000 0000 (1代表负号)) 1 package com.exe10.offer; 2 3 /** 4 * [题目]将一个字符串转换成一个整数,要求不能使用字符串转换整

49、把字符串转换成整数

一.题目 题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入 +2147483647 1a33 输出 2147483647 0 二.解法 1 public class Solution { 2 /* public int StrToInt(String str) { 3 if(str.equals("

剑指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》第六十三题(把字符串转换成整数)

// 面试题67:把字符串转换成整数 // 题目:请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不 // 能使用atoi或者其他类似的库函数. #include <iostream> long long StrToIntCore(const char* str, bool minus); enum Status { kValid = 0, kInvalid }; int g_nStatus = kValid;//设置全局错误变量,用来反映无效输入 int StrToIn

【剑指offer】把字符串转换成整数

题目链接:把字符串转换成整数 题意:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 题解:过滤掉空格,判断正负号,然后判断每个字符是否是数字,进行转换.但是!!!!这里要考虑一个溢出 做法就是记录正负号的时候,做一个标记,在最后和pow(2,31)做比较. 代码: 1 class Solution { 2 public: 3 int StrToInt(string str){ 4 long long int ans = 0; 5 i

【剑指offer】左旋转字符串

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27366485 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S="abcXYZdef",要求输出循环左移3位后的结果,即"XYZdefabc".是不是很简单?OK,搞定它! 输入: 多组测试数据,每个测试数据包含一个