14. Bekerja dengan teks — Solusi PR

File solusi .lua ada di exercises/14/homework/solutions/.

Soal 1 — Inisial

Soal. Cetak inisial seperti K.R. dari nama depan dan nama belakang.

Cara berpikirnya. Huruf pertama sebuah nama diambil dengan string.sub(name, 1, 1). Sambungkan dengan .. dan titik.

Solusi lengkap.

local first = "Keiko"
local last = "Raharja"

print(string.sub(first, 1, 1) .. "." .. string.sub(last, 1, 1) .. ".")

Keluaran:

K.R.

Kesalahan umum.

  • string.sub(first, 1) (tanpa akhir) mengembalikan nama secara utuh. Gunakan (first, 1, 1).

Soal 2 — Mengandung

Soal. Cetak yes atau no tergantung apakah sebuah kalimat mengandung kata lua.

Cara berpikirnya. string.find mengembalikan nil kalau kata tidak ditemukan, dan nil bernilai salah, sehingga akan masuk ke cabang if.

Solusi lengkap.

local sentence = "i am learning lua this year"

if string.find(sentence, "lua") then
    print("yes")
else
    print("no")
end

Kesalahan umum.

  • Membandingkan dengan == true. find mengembalikan sebuah angka saat ada kecocokan, bukan true. Biarkan if yang mengujinya; nilai selain nil dianggap benar.

Soal 3 — Sensor

Soal. Ganti setiap spasi dengan tanda hubung.

Solusi lengkap.

local message = "meet me at noon"
print(string.gsub(message, " ", "-"))

Tunggu dulu — ini mencetak dua hal, karena gsub juga mengembalikan jumlah penggantian:

meet-me-at-noon 4

Untuk mencetak hanya stringnya saja, simpan ke variabel:

local message = "meet me at noon"
local dashed = string.gsub(message, " ", "-")
print(dashed)         -- meet-me-at-noon

Kesalahan umum.

  • Terkejut dengan angka di belakang. gsub mengembalikan string dan jumlah penggantian; tangkap ke variabel agar hanya mendapat stringnya.

Tantangan — Panjang kata terakhir

Soal. Cetak tiga karakter terakhir dengan indeks negatif, dan panjangnya dengan #.

Solusi lengkap.

local word = "programming"

print(string.sub(word, -3))   -- ing
print(#word)                  -- 11

Karena -3 dihitung dari akhir, ini memberikan tiga huruf terakhir dari kata apapun — tanpa perlu menghitung manual.

Kesalahan umum.

  • string.sub(word, #word - 2) juga bisa, tapi -3 lebih singkat dan lebih jelas: "tiga dari akhir".

Selesai?

Sekarang kamu sudah bisa memotong, mencari, dan mengganti teks. Bab terakhir Bagian 3 — Mendapatkan input — memungkinkan pengguna mengetik nilai, yang masuk sebagai string untuk dipotong dan diperiksa.