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

题目描述

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

输入描述:

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

输出描述:

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

输入

+2147483647
    1a33

输出

2147483647
    0

思路:主要考虑边界条件:

a、第一个字符是否为'+'或者'-'

b、空串

c、判断是否溢出

 1 class Solution {
 2 public:
 3     int StrToInt(string str) {
 4         int len = str.length();
 5         long ans = 0; //用long或者long long吧,因为ans一开始不考虑正负,如果实际上是最小的负数,那么ans一开始计算得到的记过就会溢出
 6         bool positive = true;
 7         for (int i = 0; i < len; i++) {
 8             //只要符合就计入
 9             if (str[i] >= '0' && str[i] <= '9') {
10                 ans = ans * 10 + (str[i] - '0');
11             } else { //否则判断是否是第一个字符,并且只有第一个字符是'+'或者'-',才符合条件
12                 if (i == 0 && (str[i] == '-' || str[i] == '+')) {
13                     positive = true ? (str[i] == '+') : (str[i] == '-');
14                 } else {
15                     return 0;
16                 }
17             }
18         }
19         if (positive == false) {
20             ans *= -1;
21         }
22         return ans;
23     }
24 };

 

posted @ 2019-04-03 22:09  琴影  阅读(226)  评论(0编辑  收藏  举报