>  기사  >  백엔드 개발  >  문자열에서 반복되는 하위 문자열 중 하나만 교체하여 교체

문자열에서 반복되는 하위 문자열 중 하나만 교체하여 교체

PHPz
PHPz앞으로
2024-02-09 08:15:29970검색

문자열에서 반복되는 하위 문자열 중 하나만 교체하여 교체

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。最好使用 runes(유니코드 코드 포인트)를 추가하면 더 이상 latin1 문자로 제한되지 않습니다.

으아악

P.S. 이 비교는 잘못되었습니다

으아악

다음은 ifunknown_word_string == word 并位于调用 iterate()이어야 합니다.

위 내용은 문자열에서 반복되는 하위 문자열 중 하나만 교체하여 교체의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제