題目描述
輸入的每行都是一個國家名稱,請將著些國家名稱讀取到一個陣列中儲存,接著把名稱有包含「a」或「A」的元素過濾掉,輸出過濾之後的結果。
原題網址
輸入格式
輸入的每行都是一個國家名稱,只會有大小寫英文字母和連字符號「-」。
輸出格式
將含有「a」或「A」的國家名稱過濾掉之後,輸出剩下來的國家名稱,用空白字元隔開。如果所有國家名稱都被過濾掉了,則輸出空行。
範例輸入
Namibia
Nauru
Nepal
Netherlands
NewZealand
Nicaragua
Niger
Nigeria
NorthKorea
Norway
Nauru
Nepal
Netherlands
NewZealand
Nicaragua
Niger
Nigeria
NorthKorea
Norway
範例輸出
Niger
額外解釋
輸入的國家名稱中,只有「Niger」沒有包含「a」或「A」字元。
解題概念
Bash的陣列元素可以直接使用以下格式來指派:
陣列名稱[索引值]=元素
若之後要取得陣列的元素內容,可以這樣寫:
${陣列名稱[索引值]}
分別將輸入的各行作為元素存到陣列中,Bash可以這樣寫:
i=0
array=
while read LINE
do
array[$i]=$LINE
((i += 1))
done
如果要印出陣列中所有的內容,可以使用「@」符號來取代索引值。格式如下:
echo ${陣列名稱[@]}
使用「@」符號的話,也可以搭配樣本(Pattern)來過濾掉不想要輸出的元素,格式如下:
echo ${陣列名稱[@]/樣本/}
符合樣本的元素將不會被輸出。因此如果不想輸出「Ni」開頭的元素,可以將echo命令寫成:
echo ${陣列名稱[@]/Ni*/}
如果不想輸出包含「a」字元的元素,可以將echo命令寫成:
echo ${陣列名稱[@]/*a*/}
樣本在預設情況下是會區分大小寫的。如果不想區分大小寫,可以改用中括號來撰寫規則,如下:
echo ${陣列名稱[@]/*[aA]*/}
參考答案
#!/bin/bash
i=0
array=
while read LINE
do
array[$i]=$LINE
((i += 1))
done
echo ${array[@]/*[aA]*/}