题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
思路 : 简单题 ,不做赘述 ,看代码注释
1、java版本
/*(1)判断正负号,确认起始位置,设置符号标志位
* (2)从后往前遍历,过程中判断当前字符串是否合法(c<48||c>57),有一个不合法就直接返回false
* (3)遍历过程中,倍数不断增加,具体细节是:
* int num = c - '0';
* ret += num*times;
* times *= 10;
* (4) 最后得出结果,还要根据标志位判断+-,如果是-,则减去自身的两倍,就得到负数了*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
String string ="235a14";
System.err.println(solution.StrToInt(string));
}
public int StrToInt(String str) {
// 0-9:48-57
int len = str.length();
if (len == 0) {
return 0;
}
if (len == 1 && str.charAt(0) == 0) {
return 0;
}
int sign = 0;
int begin = 0;
if (str.charAt(0) == '+') {
sign = 0;
begin++;
} else if (str.charAt(0) == '-') {
sign = 1;
begin++;
}
int times = 1;// 倍数
int ret = 0;// 结果
for (int i = len - 1; i >= begin; i--) {
char c = str.charAt(i);
if (c < 48 || c > 57) {
return 0;// 不合适则返回0
}
int num = c - '0';
ret += num * times;
times *= 10;
}
if (sign == 1) {
return ret - 2 * ret;
}
return ret;
}
}
2、c++版本
//
// Created by stephen on 2021/3/11.
//
#include <string>
#include <cmath>
using namespace std;
class Solution {
public:
int StrToInt(string str) {
int flag = 1;
int count = 0;
int sum = 0;
for (int i = str.length() - 1; i >= 0; --i) {
if (str[i] == '+' || str[i] == '-') {
if (str[i] == '-')
flag = 0;
continue;
}
if (str[i] >= '0' && str[i] <= '9') {
sum += (str[i] - '0') * pow(10, count);
count++;
} else
return 0;
}
if (flag == 0)
return -sum;
return sum;
}
};