把字符串转换成整数
- 问题:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
方法一(自己写的直白的方法,抛砖引玉)
class Solution {
public:
//char转换成int
int CharToInt(char c){
int res;
res = c - '0';
if (res<0 || res>9)
return 0;
return res;
}
//判断一个char是不是数字
bool is_num(char c){
if (c - '0'>=0 && c - '9'<=0)
return true;
else
return false;
}
//
int StrToInt(string str) {
int len = str.size();
if (len <= 0)
return 0;
string num = "";//存所有数字
bool flag = true;//标志正负
for (int i = 0; i < len; i++){
if (is_num(str[i]))
num += str[i];
else if (str[i] == '-')
flag = false;
else if (str[i] == '+')
flag = true;
else
return 0;//如果不是数字就会返回0,这是测试用例的原因
}
int size = num.size();
int res = 0;
for (int i = size; i; i--){
int large = 1;
for (int j = i - 1; j; j--)
large *= 10;
res += CharToInt(num[size - i])*large; //这个是可以优化的地方
}
if (flag == false)
res *= -1;
return res;
}
};
方法二(位操作,的简单算法)
class Solution {
public:
int StrToInt(string str) {
int res = 0, n = str.size(), s = 1;
if (!n) return 0;
if (str[0] == '-') s = -1;
for (int i = (str[0] == '-' || str[0] == '+') ? 1 : 0; i < n; ++i){
if (!('0' <= str[i] && str[i] <= '9'))
return 0;
res = (res << 1) + (res << 3) + (str[i] & 0xf);//res=res*10+str[i]-'0';
}
return res * s;
};