我正在开发一个项目,其中包括使用 Damm Algorithm 验证 Int 输入的校验和。我设法创建了一个操作表,我访问表中值的方法涉及传递一个中间值和一个数字作为列值传入。
前任。

     self.tableToUse[interim,checkSumArray[i]]

不幸的是,当我尝试将输入中的数字传递到 get/set 方法时遇到了一个障碍,在该方法中我找不到将字符转换为 Int 的方法。
    func encode(number: Int) -> Int{
    var checkSumArray = [Int]()
    if number > 99999999 {
        println("number is too large")
        return 0
    }
    else if number < 0 {
        println("invalid input")
        return 0
    }
    else {
        checkSumArray.append(number%(10))
        checkSumArray.append((number%(100)-checkSumArray[0])/10)
        checkSumArray.append((number%(1000)-checkSumArray[1])/100)
        checkSumArray.append((number%(10000)-checkSumArray[2])/1000)
        checkSumArray.append((number%(100000)-checkSumArray[3])/10000)
        checkSumArray.append((number%(1000000)-checkSumArray[4])/100000)
        checkSumArray.append((number%(10000000)-checkSumArray[5])/1000000)
        checkSumArray.append((number%(100000000)-checkSumArray[6])/10000000)
        checkSumArray = checkSumArray.reverse()

        var interim: Int = 0

        for i in 0..<checkSumArray.count{
            interim = self.tableToUse[interim,checkSumArray[i]]
        }
        return interim
    }
}

正如你所看到的,我不得不采取一种非常讨厌的方式来处理这个问题。它有效,但它非常有限,效率低下,而且看起来或维护起来很丑陋。我已经研究了在我构建的 Damm 表中使用 Characters 而不是 Ints 的选项,并更改了 get/set 方法来处理这些问题,但这是很多额外的工作,可能会引入其他问题。任何有关处理此问题的替代方法的建议,或将字符转换为整数的方法,将不胜感激。

谢谢!

最佳答案

不需要使用字符,但是您的代码可以创建一个
输入数字的十进制数字的数组可以大大
简化:

var checkSumArray = [Int]()
var tmp = number
while tmp > 0 {
    checkSumArray.append(tmp % 10)
    tmp /= 10
}
checkSumArray = checkSumArray.reverse()

关于ios - 在 Swift 中将字符转换为 Int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28822429/

10-12 04:04
查看更多