Swift将"123"和123倒序

关于倒序的思考
最近有朋友面试,碰到一个面试题,我对此有点兴趣,做了一下思考:
大体思路就是,将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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容