
php小编柚子替换字符串中重复的子字符串仅替换其中一个是一个常见的问题。在字符串处理中,有时候我们需要将字符串中重复出现的子字符串进行替换,但是我们又不想替换所有的重复子字符串,而是只替换其中一个。这样可以保留其他相同的子字符串,同时达到我们想要的替换效果。在php中,我们可以借助一些内置函数和正则表达式来实现这个需求。下面,我们将详细介绍如何实现替换字符串中重复的子字符串仅替换其中一个的方法。
我正在用 go 制作一个简单的刽子手游戏,但我遇到了一个错误,unknow_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 (unicode 代码点),这样您就不再局限于 latin1 字符。
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)
}附注:这种比较是错误的
if unknown_word_string == input {
fmt.Println("Player 1 lost! Player 2 guessed the word by guessing the letter!")
}它应该是 ifunknown_word_string == word 并位于调用 iterate() 之后。
以上就是替换字符串中重复的子字符串仅替换其中一个的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号