美文网首页
Swift将"123"和123倒序

Swift将"123"和123倒序

作者: iOS小乔 | 来源:发表于2018-09-10 15:03 被阅读88次

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

    相关文章

      网友评论

          本文标题:Swift将"123"和123倒序

          本文链接:https://www.haomeiwen.com/subject/tetsgftx.html