Heim  >  Artikel  >  Backend-Entwicklung  >  Ersetzen Sie wiederholte Teilzeichenfolgen in einer Zeichenfolge, indem Sie nur eine davon ersetzen

Ersetzen Sie wiederholte Teilzeichenfolgen in einer Zeichenfolge, indem Sie nur eine davon ersetzen

PHPz
PHPznach vorne
2024-02-09 08:15:29970Durchsuche

Ersetzen Sie wiederholte Teilzeichenfolgen in einer Zeichenfolge, indem Sie nur eine davon ersetzen

php-Editor Yuezi ersetzt wiederholte Teilzeichenfolgen in einer Zeichenfolge. Es ist ein häufiges Problem, nur eine davon zu ersetzen. Bei der String-Verarbeitung müssen wir manchmal wiederholte Teilstrings in einem String ersetzen, aber wir möchten nicht alle wiederholten Teilstrings ersetzen, sondern nur einen davon. Dadurch können andere identische Teilzeichenfolgen beibehalten und gleichzeitig der gewünschte Ersetzungseffekt erzielt werden. In PHP können wir diese Anforderung mithilfe einiger integrierter Funktionen und regulärer Ausdrücke erreichen. Im Folgenden stellen wir detailliert vor, wie die Methode zum Ersetzen nur einer der wiederholten Teilzeichenfolgen in der Zeichenfolge implementiert wird.

Frageninhalt

Ich mache ein einfaches Henkerspiel mit go, aber ich stoße auf einen Fehler, bei dem die Zeichenfolge „unknown_string“ (die im Code angezeigt wird) das Zeichen _ hat, sodass andere Spieler die Buchstaben erraten können Sehen Sie sich die Länge des Wortes an. Immer wenn der Spieler den richtigen Buchstaben eingibt, möchte ich, dass er das n-te (n hängt vom Index ab, in dem der Buchstabe im Wort gefunden wird) _ Zeichen durch diesen Buchstaben ersetzt. Dies war erfolgreich, aber da ist ein Problem. Wenn ein Wort zwei wiederholte Buchstaben hat, wird nur einer davon ersetzt.

Ich habe eine separate Funktion namens iterate erstellt (diese Funktion wurde erstellt, weil ich verschachtelten Code vermeiden wollte), um über alle Indizes zu iterieren. Aber es funktioniert nicht, der Code lautet wie folgt:

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)
}

Lösung

Vergleich if change_unknown_word_string[i] == change_unknown_word_string[index] 没有任何意义,因为 unknown_word_string 显然在这些位置包含 _.

Sie sollten word[i] == input[0] in einer Schleife vergleichen.

Beachten Sie jedoch, dass Sie string 转换为 byte 数组不支持 unicode。最好使用 runes (Unicode-Codepunkte) hinzufügen, damit Sie nicht mehr auf lateinische1-Zeichen beschränkt sind.

func iterate() {
    needle := []rune(input)[0]
    haystack := []rune(word)
    buf := []rune(unknown_word_string)
    for i := range haystack {
        if haystack[i] == needle {
            buf[i] = needle
        }
    }
    unknown_word_string = string(buf)
}

P.S. Dieser Vergleich ist falsch

if unknown_word_string == input {
            fmt.Println("Player 1 lost! Player 2 guessed the word by guessing the letter!")
        }

Es sollte ifunknown_word_string == word 并位于调用 iterate() danach sein.

Das obige ist der detaillierte Inhalt vonErsetzen Sie wiederholte Teilzeichenfolgen in einer Zeichenfolge, indem Sie nur eine davon ersetzen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen