将数组中的字符转换为整数

Posted

技术标签:

【中文标题】将数组中的字符转换为整数【英文标题】:Converting Character in an array to an Integer 【发布时间】:2014-06-28 05:37:57 【问题描述】:

即使我搜索了文档,我似乎也无法弄清楚如何做到这一点。

我正在尝试弄清楚如何将数组中索引处的字符转换为整数。

例如,假设我有一个名为“容器”的字符数组,我不知道该怎么做:

var number:Integer = container[3]

感谢您的帮助!

【问题讨论】:

你是指Swift类型Character还是CChar/CString 我觉得可以在数组上调用utf8,然后找到对应的索引。我在converting a string to a double 时遇到了同样的问题。 它的类型 Array 假设数组的第三个元素是字符????。你希望number 最终变成什么? 【参考方案1】:

Swift 并不容易在事物的原始表示和类型表示之间进行转换。这是一个在此期间应该有所帮助的扩展:

extension Character 
    func utf8Value() -> UInt8 
        for s in String(self).utf8 
            return s
        
        return 0
    

    func utf16Value() -> UInt16 
        for s in String(self).utf16 
            return s
        
        return 0
    

    func unicodeValue() -> UInt32 
        for s in String(self).unicodeScalars 
            return s.value
        
        return 0
    

这可以让你非常接近你想要的:

let container : Array<Character> = [ "a", "b", "c", "d" ]
/// can't call anything here, subscripting's also broken
let number = container[2]
number.unicodeValue() /// Prints "100"

对于遇到此问题的任何工程师,请参阅 rdar://17494834

【讨论】:

【参考方案2】:

我不确定它是否有效,但至少它有效。我将 Character 转换为 String,然后转换为 Int。

String(yourCharacterInArray).toInt()

【讨论】:

【参考方案3】:

你可以试试这个:

var container = "$0123456789"
var number:Int = Array(container.utf8).map  Int($0) [3]

这完全是丑陋的,但它的工作。此外,它的计算成本有点高(每次访问字符串中的字符时 O(n))。尽管如此,这仍然可能是一种恢复构建 CStrings 方法的技巧:

typealias CString = Array<CChar>
func toCString(string: String) -> CString 
    return Array(string.utf8).map  CChar($0)  + [0]

var cString = toCString("$ 0123456789")
println("The 2nd character in cString has value \(cString[1])") // It outputs 32

或者不实现函数:

var container = "$ 0123456789"
var containerAsCString = Array(container.utf8).map  CChar($0)  + [0]
println("The 2nd character in container has value \(containerAsCString[1])") // It outputs 32

【讨论】:

【参考方案4】:

为什么不只 for 循环数组并将所有内容都转换为 Int?

https://developer.apple.com/Library/mac/documentation/General/Reference/SwiftStandardLibraryReference/index.html

【讨论】:

【参考方案5】:

为什么不直接将字符转换为字符串,为其获取 unicodeScalars 并提取标量上的 .value?

类似:

var chr: [Character] = ["C", "B", "A"]

for a in String(chr[1]).unicodeScalars 
    println(a.value)

【讨论】:

【参考方案6】:

对我来说是这样的:

"\(container[3])".toInt()

【讨论】:

以上是关于将数组中的字符转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

将字符数组转换为整数数组

将 C++ 中的数组转换为字符串

标准C语言中如何将字符串中的内容转换为字符数组?

如何将字符串中的多个数字转换为整数

将整数转换为字符数组:java

将字符串数组转换为整数数组