2019.2.15 《剑指Offer》从零单刷个人笔记整理(66题全)目录传送门
这题只要注意整数的正负号即可,从高位开始一位一位进行转换。
题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
Java实现:
/**
*
* @author ChopinXBP
* 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0)。
* 要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
*
*/
public class StrToInt_48 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(StrToInt("+2147483647"));
}
public static int StrToInt(String str) {
int length = str.length();
if(length == 0) return 0;
int result = 0;
int loc = 1;
int end = 0;
if(str.charAt(0) == '+') {
end++;
}
else if(str.charAt(0) == '-') {
loc = -1;
end++;
}
length--;
while(length >= end) {
if(!isNum(str.charAt(length))) return 0;
result += Integer.parseInt(str.charAt(length) + "") * loc;
loc *= 10;
length--;
}
return result;
}
public static boolean isNum(char c){
if(c >= '0' && c <= '9') {
return true;
}else {
return false;
}
}
}
C++实现示例:
class Solution {
public:
int StrToInt(string str) {
int n = str.size(), s = 1;
long long res = 0;
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;
}
};
#Coding一小时,Copying一秒钟。留个言点个赞呗,谢谢你#