12. String — Solusi PR
File solusi .go ada di
exercises/12/homework/solutions/.
Soal 1 — Inisial
Soal. Cetak inisial seperti K.R. dari
nama depan dan nama belakang.
Cara berpikir. Huruf pertama sebuah nama, sebagai
string, adalah name[:1]. Gabungkan potongan-potongannya
dengan + dan titik.
Solusi yang dikerjakan.
package main
import "fmt"
func main() {
first := "Keiko"
last := "Raharja"
fmt.Println(first[:1] + "." + last[:1] + ".")
}Output:
K.R.
Kesalahan umum.
- Memakai
first[1:2], bukanfirst[:1]. Indeks1adalah posisi kedua. Posisi pertama selalu di indeks0. - Memakai
first[0](indeks), bukanfirst[:1](slice). Indeks memberikan byte, dan+tidak bisa menyambung byte dengan string.
Soal 2 — Baris stat
Soal. Gunakan fmt.Printf untuk
menghasilkan Keiko Lv 7 HP 95.
Cara berpikir. Tiga nilai, tiga penanda di dalam
string: %s untuk nama, %d untuk level,
%d untuk HP. Label (Lv, HP) dan
spasi antar bagian ada di dalam string itu sendiri.
Solusi yang dikerjakan.
package main
import "fmt"
func main() {
name := "Keiko"
level := 7
hp := 95
fmt.Printf("%s Lv %d HP %d\n", name, level, hp)
}Output:
Keiko Lv 7 HP 95
Dua spasi setelah %s dan tiga spasi setelah level sesuai
dengan output yang diminta.
Kesalahan umum.
- Memakai
fmt.Printlndengan penanda.fmt.Printlntidak membacanya, jadi%sdicetak sebagai teks%s. - Memakai
+untuk menyambung string dan int. Go berhenti dengan errormismatched types.fmt.Printfmenerima angka secara langsung.
Soal 3 — Puisi tiga baris dalam satu panggilan
Soal. Satu panggilan fmt.Println, tiga
baris output, dipisahkan oleh \n.
Cara berpikir. Di dalam string bertanda kutip ganda,
\n adalah karakter baris baru, jadi satu string dengan dua
\n tercetak sebagai tiga baris. Komentarnya harus
menjelaskan mengapa: fmt.Println menulis apa pun
yang diberikan, dan string ini sudah berisi karakter baris baru.
Solusi yang dikerjakan.
package main
import "fmt"
func main() {
fmt.Println("Code is poetry,\nbugs are typos,\nfix them and ship.")
// Satu panggilan tetap menghasilkan tiga baris karena string itu sendiri berisi
// dua karakter \n, dan masing-masing memulai baris baru di terminal.
}Output:
Code is poetry,
bugs are typos,
fix them and ship.
Kesalahan umum.
- Menulis
\\n, bukan\n. Dua garis miring terbalik berarti garis miring terbalik biasa diikuti hurufn, yang bukan baris baru. - Memakai backtick dengan
\ndi dalamnya. Dalam raw string,\ntetap dua karakter itu.
Tantangan — Huruf terakhir
Soal. Cetak tiga karakter terakhir dengan slice, dan
panjangnya dengan len.
Cara berpikir. Go tidak punya indeks negatif. Tiga
byte terakhir dimulai di len(word)-3, dan menghilangkan
stop berarti sampai akhir.
Solusi yang dikerjakan.
package main
import "fmt"
func main() {
word := "programming"
fmt.Println(word[len(word)-3:])
fmt.Println(len(word))
}Output:
ing
11
Karena len(word)-3 dihitung dari katanya sendiri, baris
yang sama berfungsi untuk kata apa pun dengan minimal tiga huruf — tidak
perlu menghitung.
Kesalahan umum.
- Menulis
word[-3:]. Go berhenti denganinvalid argument: index -3 (constant of type int) must not be negative. - Menulis
word[len(word)-3]tanpa:. Indeks memberikan satu byte, yang dicetak sebagai angka, bukan tiga huruf terakhir. - Menulis
word[len(word):], yaitu slice dari akhir sampai akhir. Hasilnya string kosong.
Selesai?
Berikutnya Angka dan matematika, lalu Bekerja dengan teks dan Mendapatkan input, kemudian mini-proyek Bagian 3.