The challenge

The task is to take a string of lower-cased words and convert the sentence to upper-case the first letter/character of each word

Example:

this is the sentence would be This Is The Sentence

The solution in Golang

Option 1:

As a first approach, we could loop through each word, and Title it before adding it back to a new string. Then make sure to trim any spaces before returning it.

1
2
3
4
5
6
7
8
9
package solution
import "strings"
func ToTitleCase(str string) string {
  s := ""
  for _, word := range strings.Split(str, " ") {
    s += strings.Title(word)+" "
  }
  return strings.TrimSpace(s)
}

Option 2:

This could be dramatically simplified by just using the Title method of the strings module.

1
2
3
4
5
package solution
import "strings"
func ToTitleCase(str string) string {
  return strings.Title(str)
}

Option 3:

Another option would be to perform a loop around a Split and Join instead of trimming.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package solution
import "strings"
func ToTitleCase(str string) string {
  words := strings.Split(str, " ")
  result := make([]string, len(words))
  for i, word := range words {
    result[i] = strings.Title(word)
  }
  return strings.Join(result, " ")
}

Test cases to validate our solution

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package solution_test
import (
  . "github.com/onsi/ginkgo"
  . "github.com/onsi/gomega"
)
var _ = Describe("Test Example", func() {
  It("should work for sample test cases", func() {
    Expect(ToTitleCase("most trees are blue")).To(Equal("Most Trees Are Blue"))
    Expect(ToTitleCase("All the rules in this world were made by someone no smarter than you. So make your own.")).To(Equal("All The Rules In This World Were Made By Someone No Smarter Than You. So Make Your Own."))
    Expect(ToTitleCase("When I die. then you will realize")).To(Equal("When I Die. Then You Will Realize"))
    Expect(ToTitleCase("Jonah Hill is a genius")).To(Equal("Jonah Hill Is A Genius"))
    Expect(ToTitleCase("Dying is mainstream")).To(Equal("Dying Is Mainstream"))
  })
})