gpt4 book ai didi

swift - 基于可变数量的内循环进行迭代

转载 作者:搜寻专家 更新时间:2023-11-01 06:39:57 24 4
gpt4 key购买 nike

在下面的代码中,我试图遍历所有可能的字母组合以获得运行时变量的字符数。

这段代码的目的是构建一种密码破解器,基本上是暴力猜测字符串。我想使用循环,因为一旦命中正确的组合,我就能够打破循环,从而节省时间和资源,否则如果我尝试在第一步中构建所有可能组合的数组,将需要这些资源。

我有一个静态代码,适用于 5 个字符长的字符串,但实际上我的字符串可以是任意长度。如何使我的代码适用于任意长度的字符串?

let len = textField.text?.characters.count //Length of string
let charRange = "abcdefghijklmnopqrstuvwxyz" //Allowed characterset

for char1 in charRange.characters {
for char2 in charRange.characters {
for char3 in charRange.characters {
for char4 in charRange.characters {
for char5 in charRange.characters {
// Do whatever with all possible combinations
}
}
}
}
}

我想我必须以某种方式利用 for totalChars in 1...len { 但不知道如何动态创建 for 循环?

最佳答案

想法:使用字母表中的索引数组形成字符串;每次增加索引。

[0, 0, 0] -> [1, 0, 0] -> [2, 0, 0] ->
[0, 1, 0] -> [1, 1, 0] -> [2, 1, 0] ->
[0, 2, 0] -> [1, 2, 0] -> [2, 2, 0] ->
[0, 0, 1] ... [2, 2, 2]

这是一个使用长度为 3 和字母表 abcd

的示例
let len = 3
let alphabet = "abcd".characters.map({ String($0) })
var allStrings = [String]()
let maxIndex = alphabet.endIndex
var indicies = Array(count: len, repeatedValue: 0)

outerLoop: while (true) {
// Generate string from indicies
var string = ""
for i in indicies {
let letter = alphabet[i]
string += letter
}
allStrings.append(string)
print("Adding \(string)")

// Increment the index
indicies[0] += 1

var idx = 0
// If idx overflows then (idx) = 0 and (idx + 1) += 1 and try next
while (indicies[idx] == maxIndex) {
// Reset current
indicies[idx] = 0
// Increment next (as long as we haven't hit the end done)
idx += 1
if (idx >= alphabet.endIndex - 1) {
print("Breaking outer loop")
break outerLoop
}
indicies[idx] += 1
}
}

print("All Strings: \(allStrings)")

关于swift - 基于可变数量的内循环进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36776371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com