2013-01-11 99 views
0

我正在做家庭作業,必須做一個工作的hang子手應用程序。 我得到了大部分工作,但我想做點什麼,不能完全弄清楚如何去做。家庭作業:Hang子手

我想要做什麼: 有一個名爲$string的字符串,它包含單詞表中的隨機單詞。當我開始hang子手時,我想爲隨機字中的每個字符顯示"*"。 其次,我想在播放器猜出它時,將"*"與真正的字符值連接起來。

所以如果這個詞是「你好」,我想顯示"*****",當有人猜到一個字母"l"時,它會顯示"**ll*"

我已經試過:

子字符串替換 - http://tldp.org/LDP/abs/html/string-manipulation.html

TR(一對夫婦的格式,並沒有真正理解如何使用,正確我追平了[CHAR*REPEAT]但不斷收到錯誤) 並搜索了很多網站,但大多數命中是關於將字符串中的1個特定字符串並非所有字符串。

你能幫我理解嗎?

+0

請發表您當前的代碼,所以我們至少可以有機會你指出正確的方向。 – Perleone

回答

2

如果你已經猜到了人物和你的字符串列表,你可以告訴tr更換除由「*」的猜字,空格和換行的一切面膜吧:

guessed="etaonris" 
string="doing a homework assignment" 
masked=$(tr -c "\n $guessed" "*" <<< "$string") 
echo "$masked" 

這給你*oin* a *o*e*or* assi*n*ent

+0

謝謝你的建議,明天我會試試。 您能否介紹<<<代碼? 它是做什麼的?我知道<< and >>但我不知道<<<。 – VeldMuijz

+0

<<<是用於將字符串管道輸入到stdin的bash特定語法。它大多相當於'$(echo「$ string」| tr -c「\ n $ guessed」「*」)' –

4

bash的parameter expansionpattern matching會做:

$ string="hello world" 
$ guess="" 
$ echo "${string//[^[:space:]$guess]/*}" 
***** ***** 

$ guess+="l" 
$ echo "${string//[^[:space:]$guess]/*}" 
**ll* ***l* 

$ guess+="o" 
$ echo "${string//[^[:space:]$guess]/*}" 
**llo *o*l*