• 把字符串转换成整数


    题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0. 输入一个字符串,包括数字字母符号,可以为空。如果是合法的数值表达则返回该数字,否则返回0。

    这道题没有独特的解题思路,就按照要求做就可以。首先输入的字符串前面一部分可能有空格,或者整个是一个空字符串,所以首先要把空格去掉,用一个循环就可以搞定。如果发现空格的长度和字符串的长度相同,说明整个字符串都是由空格组成,直接返回0即可。

    然后要判断这个数是正还是负,也就是字符串里有没有+、-。可以用一个flag来保存,默认flag为正数,如果去掉空格后的字符串以-开头,那么将flag置为负数。

    下一步开始计算数值res,这个数要用long long类型来保存,如果读入的字符在0~9之间,那么让res*10 再加上当前字符的数值就可以了。如果读入的字符非法,直接返回0.

    然后看一下之前的flag,如果是负数,还要再乘-1.

    最后判断数值是否合法,在INT_MIN和INT_MAX之间,如果不合法,也返回0. 还要注意在最开始的时候特判一下字符串本身是否为空,如果为空,直接返回0.

    c++代码如下:

     1 class Solution {
     2 public:
     3     int StrToInt(string str) {
     4         if(str.empty()) return 0;
     5         int k = 0;
     6         bool isminus = false;
     7         while(k < str.size() && str[k] == ' ') k++;
     8         if(k == str.size()) return 0;
     9         if(str[k] == '+') k++;
    10         else if(str[k] == '-') isminus = true, k++;
    11         long long res = 0;
    12         while(k < str.size()){
    13             if(str[k] >= '0' && str[k] <= '9') res = res * 10 + str[k] - '0', k++;
    14             else return 0;
    15         }
    16 
    17         if(isminus) res *= -1;
    18         if(res < INT_MIN || res > INT_MAX) return 0;
    19         return res;
    20     }
    21 };
  • 相关阅读:
    RabbitMQ学习笔记【1】
    【转】ES6学习笔记
    vue学习笔记【2】--模板语法
    vue学习笔记【1】
    npm使用
    Golang密码复杂度校验
    GORM的增删改查
    GORM:创建数据
    golang的time包:时间字符串和时间戳的相互转换
    输出10以内的所有正整数(while+if用法)
  • 原文地址:https://www.cnblogs.com/hellosnow/p/12079190.html
Copyright © 2020-2023  润新知