defmodule Str do
def capitalize(word) do
String.to_charlist(word)
|> to_upper([])
|> to_string
end
defp to_upper([], result) do
Enum.reverse(result)
end
defp to_upper([32|tail], result) do
to_upper(tail, [32|result])
end
defp to_upper([?.|tail], result) do
to_upper(tail, result)
end
defp to_upper([c|tail], result) do
to_lower(tail, [upcase(c)|result])
end
defp upcase(c) when c <= ?Z, do: c
defp upcase(c), do: c - 32
defp to_lower([], result) do
Enum.reverse(result)
end
defp to_lower([32|tail], result) do
to_lower(tail, [32|result])
end
defp to_lower([?.|tail], result) do
to_upper(tail, [?.|result])
end
defp to_lower([c|tail], result) do
to_lower(tail, [lowcase(c)|result])
end
defp lowcase(c) when c >= 97, do: c
defp lowcase(c), do: c + 32
end
IO.puts Str.capitalize("oh. a DOG. woof. ")
^o^ > elixir practice_11_6.exs
Oh. A dog. Woof.