时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:463889
本题知识点: 字符串 数学 字符串
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
返回值描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
“+2147483647”
返回值
2147483647
示例2
输入
“1a33”
返回值
0
思路:正则去判断字符串里的元素,若有字母,直接返回0;
然后判断符号,注意符号后必须有数字
若直接通过1将字符串转换成整数,注意-0需要特殊处理,因为-01=-0,答案要求0
function StrToInt(str) {
// 匹配到字母就是不合规范
if (/[A-Za-z]/g.test(str)) return 0;
//开头可以有±符号(可选) , \d+必须有一个以上的数字
let reg = /([+|-]?)(\d+)/;
if (reg.test(str)) {
if (str == '-0') return 0
return str * 1
}
return 0
}
正则更高级的写法
function StrToInt(str) {
let reg1 = /[a-zA-Z]/;
if (reg1.test(str)) return 0;
let reg2 = /([+|-]?)(\d+)/;
if (reg2.test(str)) {
str = str.replace(reg2, function($0, $1, $2) {
// $0是RegExp对象,即str;$1是第一个原子组(括号)匹配到的,$2同理$1
if ($2 == 0) return $2; //处理±0
else if ($1 === "-") return $1 + $2; //处理负数
else return $2;
});
return str;
}
return 0;
}
答案参考自:q6655443322
正则学习知识推荐:后盾人正则表达式文档