使用场景
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。如果数值超过可表示的范围,则返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
代码实现
funcmyAtoi(_str:String) ->Int{
var newStr =String() //记录数字字符串
for i in 0..<str.count {
let startIndex = str.index(str.startIndex, offsetBy: i)
let endIndex = str.index(str.startIndex, offsetBy: i+1)
let char = str[startIndex..<endIndex] //根据开始位置跟结束位置取出单个字符
//char.utf8.first! 。。。将字符转成ASCII码值
if(char.utf8.first! ==32){ //空格对应的ASCII码值
if(newStr.count<1){ //当空格是第一个字符时,直接进行下一次循环
continue
}else{//当空格不是第一个字符时,结束for循环
break
}
}else if(char.utf8.first! > 47 && char.utf8.first! < 58){ //判断字符是否为0-9的数字
newStr = newStr + char
}elseif(char.utf8.first! == 43|| char.utf8.first! ==45) && newStr.count < 1{
//当字符是"+"或"-"时,且newStr为空才将"+"或"-"加入newStr中
newStr = newStr + char
}else{
break
}
}
//去除头尾空格
newStr = newStr.trimmingCharacters(in: .whitespacesAndNewlines)
ifnewStr.count<1|| newStr =="-"|| newStr =="+"{
return 0
}
//处理数字字符串转Int溢出的情况
guard Int(newStr) !=nil else{
letoneStr = newStr[str.index(str.startIndex, offsetBy:0)..
ifoneStr =="-"{
returnInt(Int32.min)
}
return Int(INT32_MAX)
}
if Int(newStr)! < Int32.min
return Int(Int32.min)
}else if Int(newStr)! > Int32.max{
return Int(Int32.max)
}
return Int(newStr)!
}
注:这是LeetCode的题目,大家有兴趣可以去看原题。入口
网友评论