没有输出的输入是不完整的

0%

剑指offer-把字符串转化成整数

本文为剑指 offer 系列第四十六篇。
主要知识点为字符串的判断和边界条件的判定,细心一点就没有问题。

题目描述

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

解题思路

本题目需要考虑的边界有以下几个:

  1. 正负号的判定
  2. 数字中间可能有非法字符
  3. 数字结果可能会超出INT类型的范围。
    考虑好以上几个边界本题目就可以得到解决。

解题代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
int StrToInt(string str) {
if(str.size() == 0) return 0;
int flag = 0; //默认正数
if(str[0] == '+'){
flag = 1;
}else if(str[0] == '-'){
flag = 2;
}
int start = flag>0?1:0;
long res = 0;
while(start < str.size()){
if(str[start]>'0' && str[start] <'9'){
res = res*10 + (str[start]-'0');
}else{
return 0;
}
start++;
}
res = (flag == 2)?(-res):res;
//判断是否出现溢出
if(res >INT_MAX || res < INT_MIN){
return 0;
}
return res;
}
};

时间复杂度为O(n),空间复杂度为O(1)

以上,本题结束!