昨天收到一個面試題,讓我寫完給他發過去.原題如下:
您好!麻煩您用任何熟悉的編程語言實現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"
*/