Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何更改/覆盖字符串中的某些字符?_String_Bash_Text - Fatal编程技术网

String 如何更改/覆盖字符串中的某些字符?

String 如何更改/覆盖字符串中的某些字符?,string,bash,text,String,Bash,Text,我在bash中有一个“绞刑人”类型的游戏。这是目前正在工作,但我只是无法得到我的头如何覆盖字符串中的某些字符 因此,目前我从用户那里收到一封信(例如“l”),它会根据字符串“hello”检查它,并打印为“uul l”(代码中的“{is$prev”),我希望当用户输入“e”时,$prev会更新为“e l\uu”,等等,以表示“h”和“o” Q:如何更改字符串中的某个字符?如果要操作变量中的单个字符,则更容易保存数组中的所有字符。这样,您可以根据数组索引更改字符。下面显示了在操作cha时从数组转换到

我在bash中有一个“绞刑人”类型的游戏。这是目前正在工作,但我只是无法得到我的头如何覆盖字符串中的某些字符

因此,目前我从用户那里收到一封信(例如“l”),它会根据字符串“hello”检查它,并打印为“uul l”(代码中的“{is
$prev
”),我希望当用户输入“e”时,
$prev
会更新为“e l\uu”,等等,以表示“h”和“o”


Q:如何更改字符串中的某个字符?

如果要操作变量中的单个字符,则更容易保存数组中的所有字符。这样,您可以根据数组索引更改字符。下面显示了在操作cha时从数组转换到数组的简单方法注意:不需要转换回变量,您只需在数组中保持猜测的单词:

#!/bin/bash

declare -a array

prev="__||_"    ## previous state of guessing
printf "%s\n" "$prev"

for ((i=0; i<${#prev}; i++)); do   ## convert to array
    array+=( ${prev:i:1} )
done

array[1]="e"                        ## update letter

## convert back to string
printf -v prev $(echo ${array[@]} | tr -d ' ')
printf "%s\n" "$prev"

如果要操作变量中的单个字符,则更容易保存数组中的所有字符。这样,您可以根据数组索引更改字符。下面显示了在操作字符时转换为数组或从数组转换的简单方法。注意:无需转换回变量,只需维护在数组中猜测的e字:

#!/bin/bash

declare -a array

prev="__||_"    ## previous state of guessing
printf "%s\n" "$prev"

for ((i=0; i<${#prev}; i++)); do   ## convert to array
    array+=( ${prev:i:1} )
done

array[1]="e"                        ## update letter

## convert back to string
printf -v prev $(echo ${array[@]} | tr -d ' ')
printf "%s\n" "$prev"

hangman的一种实现,它使用数组表示单词和答案。它从${words}指向的文件中随机选取一个单词

#!/usr/bin/env bash

words='/usr/share/dict/words'

die() { >&2 echo $@; exit 1; }

join() { local IFS="$1"; shift; echo "$*"; }

new_word() {
  unset word
  local length=$(wc -l < ${words})
  local count=$((${RANDOM} % ${length}))
  head -${count} ${words} | tail -1 | tr '[:upper:]' '[:lower:]'
}

draw_hangman() {
  # draw hangman here
  ((++guesses))
}

[[ -f ${words} ]] || die "Missing words file: ${words}"

declare -i guesses=0
declare -a word=( $(new_word | grep -o .) )
declare -a answer=( $(printf '_ %.0s' $(seq 1 ${#word[@]})) )

while :; do
  echo -e "\nPress - to quit.\n"
  echo -e "${answer[@]}\n"
  read -s -n 1 -p "$((${#word[@]} - ${guesses})) more guesses: " guess
  echo
  [[ ${guess} == '-' ]] && echo && break # quit
  [[ ${guesses} -eq $((${#word[@]} - 1)) ]] && echo -e "\nYOU LOSE!\n" && \
    echo "The word was $(join '' ${word[@]})" && break
  [[ ${word[@]} != *${guess}* ]] && draw_hangman && continue
  for i in ${!word[@]}; do
    [[ ${word[${i}]} == ${guess} ]] && answer[${i}]=${guess}
  done
  [[ ${answer[@]} == ${word[@]} ]] && echo -e "\nYOU WIN!\n" && break
done
!/usr/bin/env bash
words='/usr/share/dict/words'
die(){>&2 echo$@;退出1;}
join(){local IFS=“$1”shift;echo“$*”;}
新词{
未置词
本地长度=$(wc-l<${words})
本地计数=$(${RANDOM}%${length}))
head-${count}${words}|tail-1 | tr'[:上限:''[:下限:''
}
draw_hangman(){
#在这里画刽子手
(+++猜测)
}
[[-f${words}]| | die“缺少单词文件:${words}”
declare-i猜测=0
declare-a-word=($(新单词| grep-o.))
声明-a答案=($(printf'.%.0s'$(seq 1${单词[@]})))
当:;做
echo-e“\n按-退出。\n”
echo-e“${answer[@]}\n”
阅读-s-n1-p“$(${{单词[@]}-${猜测])更多猜测:“猜测
回声
[${guess}='-']&&echo&&break#退出
[${guesses}-eq$(${word[@]}-1))]&&echo-e“\n你输了!\n”&&\
echo“单词是$(加入'${word[@]})”&&break
[[${word[@]}!=*${guess}*]&&draw\u hangman&&continue
因为${!word[@]};中的i
[${word[${i}]}=${guess}]]&&answer[${i}]=${guess}
完成
[[${answer[@]}==${word[@]}]]]&&echo-e“\n您赢了!\n”&&break
完成

hangman的一种实现,它使用数组来表示单词和答案。它从${words}指向的文件中随机选取一个单词

#!/usr/bin/env bash

words='/usr/share/dict/words'

die() { >&2 echo $@; exit 1; }

join() { local IFS="$1"; shift; echo "$*"; }

new_word() {
  unset word
  local length=$(wc -l < ${words})
  local count=$((${RANDOM} % ${length}))
  head -${count} ${words} | tail -1 | tr '[:upper:]' '[:lower:]'
}

draw_hangman() {
  # draw hangman here
  ((++guesses))
}

[[ -f ${words} ]] || die "Missing words file: ${words}"

declare -i guesses=0
declare -a word=( $(new_word | grep -o .) )
declare -a answer=( $(printf '_ %.0s' $(seq 1 ${#word[@]})) )

while :; do
  echo -e "\nPress - to quit.\n"
  echo -e "${answer[@]}\n"
  read -s -n 1 -p "$((${#word[@]} - ${guesses})) more guesses: " guess
  echo
  [[ ${guess} == '-' ]] && echo && break # quit
  [[ ${guesses} -eq $((${#word[@]} - 1)) ]] && echo -e "\nYOU LOSE!\n" && \
    echo "The word was $(join '' ${word[@]})" && break
  [[ ${word[@]} != *${guess}* ]] && draw_hangman && continue
  for i in ${!word[@]}; do
    [[ ${word[${i}]} == ${guess} ]] && answer[${i}]=${guess}
  done
  [[ ${answer[@]} == ${word[@]} ]] && echo -e "\nYOU WIN!\n" && break
done
!/usr/bin/env bash
words='/usr/share/dict/words'
die(){>&2 echo$@;退出1;}
join(){local IFS=“$1”shift;echo“$*”;}
新词{
未置词
本地长度=$(wc-l<${words})
本地计数=$(${RANDOM}%${length}))
head-${count}${words}|tail-1 | tr'[:上限:''[:下限:''
}
draw_hangman(){
#在这里画刽子手
(+++猜测)
}
[[-f${words}]| | die“缺少单词文件:${words}”
declare-i猜测=0
declare-a-word=($(新单词| grep-o.))
声明-a答案=($(printf'.%.0s'$(seq 1${单词[@]})))
当:;做
echo-e“\n按-退出。\n”
echo-e“${answer[@]}\n”
阅读-s-n1-p“$(${{单词[@]}-${猜测])更多猜测:“猜测
回声
[${guess}='-']&&echo&&break#退出
[${guesses}-eq$(${word[@]}-1))]&&echo-e“\n你输了!\n”&&\
echo“单词是$(加入'${word[@]})”&&break
[[${word[@]}!=*${guess}*]&&draw\u hangman&&continue
因为${!word[@]};中的i
[${word[${i}]}=${guess}]]&&answer[${i}]=${guess}
完成
[[${answer[@]}==${word[@]}]]]&&echo-e“\n您赢了!\n”&&break
完成

由于您使用的是bash,因此将每个字符作为数组元素保存可以分别对每个字符进行索引/更改,而不是将单词保存在字符串中。由于您使用的是bash,因此将每个字符作为数组元素保存可以对每个字符进行索引/更改个别地。