php 편집기 Yuezi는 문자열에서 반복되는 하위 문자열을 대체하는데, 그 중 하나만 대체하는 것이 일반적인 문제입니다. 문자열 처리에서 문자열의 반복되는 하위 문자열을 교체해야 하는 경우가 있지만 반복되는 하위 문자열을 모두 교체하는 것이 아니라 그 중 하나만 교체하고 싶습니다. 이는 우리가 원하는 대체 효과를 달성하면서 다른 동일한 하위 문자열을 유지할 수 있습니다. PHP에서는 일부 내장 함수와 정규식을 사용하여 이러한 요구 사항을 충족할 수 있습니다. 아래에서는 문자열에서 반복되는 부분 문자열 중 하나만 바꾸는 방법을 구현하는 방법을 자세히 소개하겠습니다.
go로 간단한 행맨 게임을 만들고 있는데 (코드에 표시될)known_string 문자열에 _ 문자가 있어서 문자를 추측하는 다른 플레이어가 볼 수 있는 버그가 발생했습니다. 단어의 길이, 플레이어가 올바른 문자를 입력할 때마다 n번째(n은 단어에서 문자가 발견된 인덱스에 따라 다름) _ 문자를 해당 문자로 대체하고 싶습니다. 성공했지만 문제. 단어에 두 개의 반복되는 문자가 있는 경우 그 중 하나만 대체됩니다.
모든 인덱스를 반복하기 위해 iterate라는 별도의 함수(이 함수는 중첩된 코드를 피하기 위해 생성됨)를 만들었습니다. 하지만 작동하지 않습니다. 코드는 다음과 같습니다.
package main import ( "fmt" "strings" ) var input string var word string var unknown_word []string var unknown_word_string string var index int var guesses int var change_unknown_word_string []byte func main() { fmt.Println("Welcome to hangman") fmt.Println("Player 1, choose a word!") fmt.Scan(&word) for i := 1; i <= len(word); i++ { unknown_word = append(unknown_word, "_") } unknown_word_string = strings.Join(unknown_word, "") for { fmt.Println("Player 2, guess a letter or a word") fmt.Println(unknown_word_string) fmt.Scan(&input) if guesses == 6 { fmt.Println("Player 2 lost! Player 1's word was: ", word) break } else if unknown_word_string == input { fmt.Println("Player 1 lost! Player 2 guessed the word by guessing the letter!") } if strings.Contains(word, input) && word != input { index = strings.Index(word, input) iterate() fmt.Println("You guessed a letter!") } else if word == input { fmt.Println("Player 1 lost! Player 2 guessed the word by guessing the whole word!") break } else { fmt.Println("Nothing found") guesses++ } } } func iterate() { change_unknown_word_string = []byte(unknown_word_string) for i := 0; i < len(change_unknown_word_string); i++ { if change_unknown_word_string[i] == change_unknown_word_string[index] { change_unknown_word_string[i] = []byte(input)[0] } } unknown_word_string = string(change_unknown_word_string) }
비교if change_unknown_word_string[i] == change_unknown_word_string[index]
没有任何意义,因为 unknown_word_string
显然在这些位置包含 _
.
반복적으로 word[i] == input[0]
를 비교해야 합니다.
하지만 string
转换为 byte
数组不支持 unicode。最好使用 rune
s(유니코드 코드 포인트)를 추가하면 더 이상 latin1 문자로 제한되지 않습니다.
P.S. 이 비교는 잘못되었습니다
으아악다음은 ifunknown_word_string == word
并位于调用 iterate()
이어야 합니다.
위 내용은 문자열에서 반복되는 하위 문자열 중 하나만 교체하여 교체의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!