首页 > 其他分享 >8. 字符串转换整数 (atoi)

8. 字符串转换整数 (atoi)

时间:2023-05-26 21:25:39浏览次数:39  
标签:字符 pow 31 len atoi 整数 字符串 231

请你来实现一个 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 。
返回整数作为最终结果。
注意:

本题中的空白字符只包括空格字符 ' ' 。
除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。
> 我的解法


class Solution {
public:
    int myAtoi(string s) {
        int flag = 0;
        int num = 0;
        int len = s.size();
        int i = 0;
        vector<int> nums;
        nums.clear();
        for (; i < len; i++) {
            if (s[i] == ' ') continue;
            else if (s[i] == '.') return 0;
            else if (s[i] >= 'a' && s[i] <= 'z') {
                return 0;
            }
            else if (s[i] >= 'A' && s[i] <= 'Z') {
                return 0;
            }
            else if (s[i] == '+') {
                flag = 1;
                i++;
                break;
            }
            else if (s[i] == '-') {
                flag = -1;
                i++;
                break;
            }
            else {
                flag = 1;
                break;
            }
        }
        //处理前部字符0
        for (; i < len; i++) {
            if (s[i] == '0') {
                continue;
            }
            else {
                break;
            }
        }
        //处理数字
        for (; i < len; i++) {
            if (s[i] <= '9' && s[i] >= '0') {
                num = s[i] - '0';
                nums.emplace_back(num);
            }
            else {
                break;
            }
        }
        long long res = 0;
        len = nums.size();
        if(len > 10) return flag>0?(pow(2,31)-1):-pow(2,31);
        for (const auto& j : nums) {
            res += flag * j * pow(10, len - 1);
            if(res < -pow(2,31)) return -pow(2,31);
            if(res > (pow(2,31)-1)) return (pow(2,31)-1);
            len--;
        }
        return res;
    }
};

标签:字符,pow,31,len,atoi,整数,字符串,231
From: https://www.cnblogs.com/lihaoxiang/p/17435831.html

相关文章

  • 查找某个字符在字符串中出现的次数
    方法一:利用正则的match方法varstr="heleleoworled";varcount=(str.match(/le/g)||[]).length;console.log(count);方法二:先把要找的字符替换为空,然后用前一个字符串的长度减去后一个字符串的长度,除以要查找的字符串的长度。varstr1="heleleoworled";vartarget="l......
  • 字符串strip方法:只要头尾包含有指定字符序列中的字符就删除
    mystr='\n\tthisisacat\n\r'mystr=mystr.strip()#默认去掉两头的空格、换行符\n,制表符\t、回车符\rprint(mystr)#只要头尾包含有指定字符序列中的字符就删除mystr='1213HelloWord2331'mystr=mystr.strip('123')#strip会把‘123’三个元素中的随便......
  • 2023-05-25:给定一个正整数 x,我们将会写出一个形如 x (op1) x (op2) x (op3) x ... 的
    2023-05-25:给定一个正整数x,我们将会写出一个形如x(op1)x(op2)x(op3)x...的表达式其中每个运算符op1,op2,…可以是加、减、乘、除之一例如,对于x=3,我们可以写出表达式3*3/3+3-3,该式的值为3在写这样的表达式时,我们需要遵守下面的惯例:除运算符(/)返回有理数任何地......
  • 2023-05-25:给定一个正整数 x,我们将会写出一个形如 x (op1) x (op2) x (op3) x ... 的
    2023-05-25:给定一个正整数x,我们将会写出一个形如x(op1)x(op2)x(op3)x...的表达式其中每个运算符op1,op2,…可以是加、减、乘、除之一例如,对于x=3,我们可以写出表达式3*3/3+3-3,该式的值为3在写这样的表达式时,我们需要遵守下面的惯例:除运算符(/)返回有理数......
  • 字符串拼接效率
    ...from  https://blog.csdn.net/m0_37422289/article/details/103362740append的最快packagemainimport("bytes""fmt""strings""time")typeEnet_smp_domain_mapstruct{//gorm.ModelId......
  • 字符串原地修改双指针经典实现
    字符串原地修改经常遇到的一类题,双指针一个用于写入,一个用于扫描,互不干扰,各司其职。题目:https://leetcode.cn/problems/reverse-words-in-a-string/stringreverseWords(strings){reverse(s.begin(),s.end());intwrite=0,scan=0;while......
  • java 通过String关键词 和 String对象创建字符串 耗时对比
    importjava.util.ArrayList;importjava.util.Vector;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){longstartTime=System.currentTimeMillis();for(inti=0;i<5000000;i++){Strings1="he......
  • 代码随想录Day8|字符串
    主要是学了java的字符串用法,题目不是很难使用StringBuilder类型可以节省时间,关于这个类型的添加和使用chartemp=sb.charAt(start);sb.setCharAt(start,sb.charAt(end));sb.setCharAt(end,temp);151.翻转字符串里的单词 https://leetcode.cn/problems/reverse-words......
  • php中日期时间字符串可以直接比较大小
    php中的日期时间字符串可以直接比较大小很多朋友还不知道,一直使用strtotime转换字符串为时间戳再比较大小。$time1='09:00';$time2='12:51';$time3='22:00';self::assertTrue($time2>$time1);self::assertTrue($time2<$time3);$date1='2021-02-03';$......
  • 字典拼接、字典字符串转字典 、列表字符串转列表
    字典拼接要拼接字典,可以使用Python的update()方法。这个方法会将一个字典的键值对添加到另一个字典中。示例代码如下:dict1={'a':1,'b':2}dict2={'c':3,'d':4}dict1.update(dict2)print(dict1)#输出结果为:{'a':1,'b':2,'c':......