昨天收到一个面试题,让我写完给他发过去.原题如下:
您好!麻烦您用任何熟悉的编程语言实现function versionCompare(v1, v2)(版本号比较)函数及测试用例。对任意软件的版本号进行大小比较,输入参数为两个版本号(格式情况请自行考虑),目标是做成库给外部开发者用。不得使用现成的版本比较函数。重点考察各类情况处理。
以下为我的答案,
今天反馈我说代码没有达到要求,不知道问题出在哪里,如果你知道,请告诉我 谢谢.
//版本比较
func versionCompare(v1:String,v2:String) -> String {
//判断合法性
if checkSeparat(vString: v1) == "" || checkSeparat(vString: v2) == ""{
return "只支持 '.''-'/''*'_'作为分隔符"
}
//获得两个数组
let v1Arr = cutUpNumber(vString: v1) as! [String]
let v2Arr = cutUpNumber(vString: v2) as! [String]
//比较版本号
return compareNumber(v1Arr: v1Arr, v2Arr: v2Arr)
}
//提取连接符
func checkSeparat(vString:String) -> String {
var separated:String = ""
if vString.contains("."){ separated = "." }
if vString.contains("-"){ separated = "-" }
if vString.contains("/"){ separated = "/" }
if vString.contains("*"){ separated = "*" }
if vString.contains("_"){ separated = "_" }
return separated
}
//提取版本号
func cutUpNumber(vString:String) -> NSArray {
let separat = checkSeparat(vString: vString)
let b = NSCharacterSet(charactersIn:separat) as CharacterSet
let vStringArr = vString.components(separatedBy: b)
return vStringArr as NSArray
}
//比较版本
func compareNumber(v1Arr:[String],v2Arr:[String]) -> String {
for i in 0..<v1Arr.count{
if Int(v1Arr[i])! != Int(v2Arr[i])! {
if Int(v1Arr[i])! > Int(v2Arr[i])! {
return "v1 > v2"
}else{
return "v1 < v2"
}
}
}
return "v1 == v2"
}
/*
//相同分隔符
v1 = "1.0.0" v2 = "1.2.0" 结果: "v1 < v2"
v1 = "0.1.0" v2 = "1.2.0" 结果: "v1 < v2"
v1 = "1.1.0" v2 = "1.0.1" 结果: "v1 > v2"
v1 = "99.0.0" v2 = "1.1.1" 结果: "v1 > v2"
v1 = "99.1.1" v2 = "99.1.1" 结果: "v1 == v2"
//不同分隔符
v1 = "1*0*0" v2 = "1.2.0" 结果: "v1 < v2""
v1 = "99.1.1" v2 = "99*1*1" 结果: "v1 == v2"
*/
网友评论