关于倒序的思考
最近有朋友面试,碰到一个面试题,我对此有点兴趣,做了一下思考:
大体思路就是,将String
转换为char
类型的数组[char]
,然后对数组for循环倒序出来,因为[char]
是以0为结尾的,所以要将0剔除,然后对新的数组进行倒序,之后拼接0结尾,最后再将新的[char]
转化为String
。搞定!对于Int
型的123
,可以将其转化为String
类型,再通过上述方法进行倒序。
一、最优解:
let word:String = "123"
let reversedWord:String = String(word.reversed())
第二种方法:根据下标进行倒序拼接
var reversedWord2:String = ""
for i in (0..<word.count).reversed() {
let startIndex = word.index(word.startIndex, offsetBy: i)
let endIndex = word.index(startIndex, offsetBy: 1)
reversedWord2.append(String(word[startIndex..<endIndex]))
}
第三种方法:根据倒序的Char数组转化为String
let word:String = "123"
var wordCharArray = word.cString(using: .utf8)
if var wordChares = wordCharArray{
wordChares.removeLast()
var reversedChares = [CChar]()
for i in (0..<wordChares.count).reversed() {
reversedChares.append(wordChares[i])
}
//在char数组中 ,0代表结束
reversedChares.append(0)
//// 这里使用Array的withUnsafeMutableBufferPointer方法将数组元素内容转为
// 指向一个连续存储空间的首地址。
let reversedCString = reversedChares.withUnsafeBufferPointer { (buffer) -> UnsafePointer<CChar> in
return buffer.baseAddress!
}
let reversedWord3:String = String.init(cString: reversedCString, encoding: .utf8)
}
注意只能对非汉字的string进行倒序,如果是汉字的情况下,则不能够进行倒序。这是因为Swift的字符串是Unicode编码格式,一个字符可能由1个或多个字节组成。另外需要注意的是CChar数组的最后一个元素是0,它表示的是一个字符串结束标志符\n。