您可以过滤包含猜测字符的 stringToGuess 的索引,并使用这些索引替换 stringToDisplay 对应的字符:
extension StringProtocol where Self: RangeReplaceableCollection {
@discardableResult
mutating func replaceOccurrences<S: StringProtocol>(of character: Character, in string: S) -> Bool {
precondition(count == string.count)
var found = false
string.indices.filter {
string[$0] == character
}.forEach {
found = true
replaceSubrange($0...$0, with: CollectionOfOne(character))
}
return found
}
}
游乐场测试:
let stringToGuess = "APPLE"
var stringToDisplay = String(repeating: "_", count: stringToGuess.count)
var guess: Character = "A"
if stringToDisplay.replaceOccurrences(of: guess, in: stringToGuess) {
print("Hangman:", stringToDisplay) // "Hangman: A____\n"
} else {
print("Character \(guess) not found on \(stringToGuess)")
}
guess = "E"
if stringToDisplay.replaceOccurrences(of: guess, in: stringToGuess) {
print("Hangman:", stringToDisplay) // "Hangman: A___E\n"
} else {
print("Character \(guess) not found on \(stringToGuess)")
}
guess = "I"
if stringToDisplay.replaceOccurrences(of: guess, in: stringToGuess) {
print("Hangman:", stringToDisplay) // "Hangman: A___E\n"
} else {
print("Character \(guess) not found on \(stringToGuess)")
}
guess = "P"
if stringToDisplay.replaceOccurrences(of: guess, in: stringToGuess) {
print("Hangman:", stringToDisplay) // "Hangman: APP_E\n"
} else {
print("Character \(guess) not found on \(stringToGuess)")
}
guess = "L"
if stringToDisplay.replaceOccurrences(of: guess, in: stringToGuess) {
print("Hangman:", stringToDisplay) // "Hangman: APPLE\n""""
} else {
print("Character \(guess) not found on \(stringToGuess)")
}
这将打印出来
刽子手:A____
刽子手:A___E
我在 APPLE 上找不到的字符
刽子手:APP_E
刽子手:苹果