IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 2021-09-12:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string -> 正文阅读

[C++知识库]2021-09-12:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string

2021-09-12:请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格,检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。如果整数数超过 32 位有符号整数范围 [?231, 231 ? 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 ?231 的整数应该被固定为 ?231 ,大于 231 ? 1 的整数应该被固定为231 ? 1。返回整数作为最终结果。注意:本题中的空白字符只包括空格字符 ’ ’ 。除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

福大大 答案2021-09-12:

数位用负数。注意两个byte的数字相减,始终是正数,不可能是负数。

代码用golang编写。代码如下:

package main

import (
    "fmt"
    "math"
    "strings"
)

func main() {
    ret := myAtoi(" +0123456 ")
    fmt.Println(ret)
}

func myAtoi(s string) int {
    if s == "" {
        return 0
    }
    s = removeHeadZero(strings.Trim(s, " "))
    if s == "" {
        return 0
    }
    str := []byte(s)
    if !isValid(str) {
        return 0
    }
    // str 是符合日常书写的,正经整数形式
    posi := true
    if str[0] == '-' {
        posi = false
    }
    minq := math.MinInt64 / 10
    minr := math.MinInt64 % 10
    res := 0
    cur := 0
    for i := twoSelectOne(str[0] == '+' || str[0] == '-', 1, 0); i < len(str); i++ {
        // 3  cur = -3   '5'  cur = -5    '0' cur = 0
        cur = int('0') - int(str[i])
        if (res < minq) || (res == minq && cur < minr) {
            return twoSelectOne(posi, math.MaxInt64, math.MinInt64)
        }
        res = res*10 + cur
    }
    // res 负
    if posi && res == math.MinInt64 {
        return math.MaxInt64
    }
    return twoSelectOne(posi, -res, res)
}

func twoSelectOne(c bool, a int, b int) int {
    if c {
        return a
    } else {
        return b
    }
}

func removeHeadZero(str string) string {
    r := strings.Index(str, "+") == 0 || strings.Index(str, "-") == 0
    s := 0
    if r {
        s = 1
    }
    for ; s < len(str); s++ {
        if str[s] != '0' {
            break
        }
    }
    // s 到了第一个不是'0'字符的位置
    e := -1
    // 左<-右
    for i := len(str) - 1; i >= twoSelectOne(r, 1, 0); i-- {
        if str[i] < '0' || str[i] > '9' {
            e = i
        }
    }
    //return str[s:twoSelectOne(e == -1, len(str), e)]
    // e 到了最左的 不是数字字符的位置
    ans := ""
    if r {
        ans = fmt.Sprintf("%c", str[0])
    }
    ans = ans + str[s:twoSelectOne(e == -1, len(str), e)]
    return ans
}

func isValid(chas []byte) bool {
    if chas[0] != '-' && chas[0] != '+' && (chas[0] < '0' || chas[0] > '9') {
        return false
    }
    if (chas[0] == '-' || chas[0] == '+') && len(chas) == 1 {
        return false
    }
    // 0 +... -... num
    for i := 1; i < len(chas); i++ {
        if chas[i] < '0' || chas[i] > '9' {
            return false
        }
    }
    return true
}

执行结果如下:
图片


左神java代码

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-13 09:05:31  更:2021-09-13 09:05:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 13:31:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计