ダブルクオート文字列のリストのセンタリング表示な課題。
- length
- rjust
が使えるのかどうか。確認しつつすすめてみます。
とりあえず
センタリング? はいっちゃん長い文字列の長さ /2 な長さの空白文字列を先頭に付ければ良いみたい。文字列の長さは
iex(19)> tmp = "abcde"
"abcde"
iex(20)> String.length(tmp)
5
なカンジらしく。あと、String.rjust
は deplicated と言われてしまうなど。
iex(23)> String.rjust(tmp2, 5, ? )
warning: found ? followed by codepoint 0x20 (space), please use ?\s instead
iex:23
warning: String.rjust/3 is deprecated. Use String.pad_leading/3 with a binary padding instead
iex:23
" abc"
あと、空白は ?\s
なんすね。
こうなのか。
iex(24)> String.pad_leading(tmp2, 5, " ")
" abc"
どうすりゃいいのか
とりあえず
- 一番長い文字列の長さ取得
- head を整形して
IO.puts
なのかな。
ありゃ?
String.pad_leading に渡す引数がアレですね。結局以下なナニがでっちあがってるんですが、これは別途リファクタリング必要な気がしています。
def center(stringlist) do
_center(stringlist, longistLength(stringlist, 0))
end
def longistLength([], longist) do
longist
end
def longistLength([head|tail], longist) do
if String.length(head) > longist do
longistLength(tail, String.length(head))
else
longistLength(tail, longist)
end
end
defp _center([], length) do
IO.puts(" ")
end
defp _center([head|tail], length) do
IO.puts(String.pad_leading(head, String.length(head) + Kernel.trunc((length - String.length(head))/2), " "))
_center(tail, length)
end
実行例? が以下。
iex(80)> String.pad_leading("cat", String.length("cat") + Kernel.trunc((8 - String.length("cat"))/2), " ")
" cat"
iex(82)> String.pad_leading("zebra", String.length("zebra") + Kernel.trunc((8 - String.length("zebra"))/2), " ")
" zebra"
iex(83)> String.pad_leading("elephant", String.length("elephant") + Kernel.trunc((8 - String.length("elephant"))/2), " ")
"elephant"