把字符串转换成整数

Posted hellosnow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把字符串转换成整数相关的知识,希望对你有一定的参考价值。

题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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 };

 

以上是关于把字符串转换成整数的主要内容,如果未能解决你的问题,请参考以下文章

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

程序员面试50题—把字符串转换成整数[算法]

把字符串转换成整数

JZ67 把字符串转换成整数

JZ67 把字符串转换成整数

JZ67 把字符串转换成整数