Halo, dan selamat datang kembali. Dalam
kuliah ini, saya ingin berbicara tentang membuat string,
khususnya bagaimana Anda dapat melakukannya di c menggunakan array karakter.
Saya cenderung menggunakan istilah string dan karakter string secara bergantian.
Tapi sebenarnya string karakter adalah array char yang akan kita bicarakan.
Ini adalah konsep yang sangat penting.
Kami sekarang akan dapat menggunakan kata dan teks dalam program kami untuk melakukan segala macam hal.
Sekarang c sendiri tidak memiliki tipe data yang mewakili string.
Tidak ada apa-apa di sana. Banyak bahasa mendukung
objek atau tipe data dari tipe string.
Sekarang karena tidak ada tipe data c dalam string, Anda tidak
dapat menggunakan salah satu operator pada string.
Jadi apa yang akhirnya kita lakukan adalah kita akan berakhir menggunakan perpustakaan standar dan ada segala
macam fungsi string yang akan kita bicarakan.
Kami memiliki tiga kuliah yang didedikasikan untuk berbagai fungsi string yang dapat Anda gunakan.
Dan ini akan membantu kita memanipulasi string, mendapatkan informasi tentang string.
Tetapi Anda tidak dapat menggunakan operator pada string, tanpa plus
atau minus string, tidak seperti itu.
String dalam c disimpan dalam array bertipe char.
Kita tahu apa itu array. Kita tahu apa itu tipe char.
Tipe char adalah karakter tunggal, array Anda bisa menyimpan
beberapa elemen dengan nama yang sama.
Jadi masuk akal bahwa string akan berada di dalam array
karakter karena string banyak banyak karakter.
Jadi karakter string disimpan dalam sel memori yang berdekatan, satu karakter per sel.
Anda dapat mengaksesnya sama seperti Anda mengakses array juga.
Tetapi bagaimana Anda sebenarnya akan mendeklarasikan string dan lihat apakah Anda cukup menggunakan tipe char
dan kemudian tanda kurung untuk menunjukkan ukurannya, sama seperti array normal jika
Anda membuatnya dari tipe yang berbeda.
Char dan kemudian apa pun nama Anda dan kemudian ukuran array
karakter di dalam tanda kurung siku.
Begitulah cara Anda mendeklarasikan string di c.
Sekarang ketika Anda mendeklarasikan string dalam c seperti ini, tidak
ada data aktual yang terkait dengannya. Anda hanya menentukan ukuran.
Itu cara paling sederhana.
Jadi variabel tersebut dapat menampung string yang berisi hingga 19 karakter.
Ingat karakter nol ini.
Jika Anda mengatakan bahwa ukuran string Anda akan menjadi 20, itu berarti hanya
19 karakter yang benar-benar dapat disimpan
karena Anda harus memiliki satu karakter tambahan untuk nol.
Ingatlah bahwa, mendeklarasikan array karakter adalah 20 berarti 19
karakter dapat disimpan di sana.
Saat Anda menentukan dimensi array yang ingin Anda gunakan sebelum string - untuk
menyimpan string, setidaknya
harus satu lebih besar dari jumlah karakter dalam string yang ingin Anda simpan.
Kompiler akan secara otomatis menambahkan terminator nol di akhir setiap konstanta string.
Jadi yang harus Anda lakukan adalah ketika Anda
membuat string karakter ini, Anda harus menginisialisasinya.
Jadi Anda dapat menginisialisasi variabel string seperti Anda menginisialisasi array.
Anda menempatkan setiap karakter di dalam tanda kurung ini.
Jadi ini terlihat sangat mirip dengan jika Anda menginisialisasi elemen dalam array integer.
Tetapi jika Anda mengucapkan kata char dan kemudian
di dalam tanda kurung berlekuk-lekuk Anda memasukkan setiap karakter tunggal
yang akan membuat array karakter.
Jadi sama seperti inisialisasi array lainnya.
Jika tidak ada ukuran, kompiler
c secara otomatis menghitung jumlah elemen dalam array dan kemudian menambahkan satu untuk terminator nol.
Jadi ini didasarkan pada jumlah inisialisasi yang Anda miliki di antara tanda
kurung, kurung kurawal.
Pernyataan ini akan menyediakan ruang dan memori untuk tepat tujuh karakter,
tanda seru h-e-l-l-o dan kemudian
terminator nol, dan diagram kecil di sebelah kanan ini menunjukkan hal itu kepada Anda.
Secara otomatis dan menambahkan terminator nol itu. Sekarang akan sangat
merepotkan jika Anda selalu harus menginisialisasi array
karakter Anda dengan tanda kutip tunggal diikuti dengan koma.
Jadi apa yang dapat Anda lakukan adalah bahkan notasi steno adalah Anda bisa menempatkan tanda kutip ganda di sekitarnya.
Jadi Anda dapat menentukan string secara eksplisit, seperti pada contoh pertama,
dan kemudian Anda harus benar-benar menggunakan fungsi string hanya
untuk menerapkan data ke
dalamnya atau Anda dapat membiarkan kompiler melakukannya untuk Anda.
Masalah dengan melakukannya secara eksplisit adalah Anda harus selalu ingat untuk menambahkan karakter
tambahan untuk null.
Jadi yang harus Anda lakukan adalah membiarkan kompiler mencari tahu untuk Anda.
Jadi jangan masukkan angka apa pun di dalam kurung itu untuk ukurannya.
Karena jika ukuran yang ditentukan terlalu kecil, kompiler tidak dapat memuat karakter
null terminasi di akhir array dan tidak menempatkannya di sana dan tidak akan memberi
tahu Anda bahwa ia tidak meletakkannya di sana.
Jadi Anda akan memiliki bug dalam program Anda, Anda bahkan tidak akan mengetahuinya.
Praktik terbaik adalah ketika Anda menggunakan string
literal dan Anda menginisialisasi string agar kompiler mengetahui ukurannya untuk Anda.
Buatlah ukuran yang lebih besar atau sesuatu dan kemudian taruh saja di sana dan itu akan mengetahui ukurannya untuk Anda.
Jadi jangan tentukan ukurannya. Biarkan kompiler mencari tahu.
Dengan cara ini Anda dapat yakin bahwa itu akan benar.
Biarkan saja tanda kurung itu sebagai tanda kurung
kosong dan tetapkan dengan operator penugasan dan kemudian di dalam tanda
kutip ganda Anda bisa meletakkannya. Anda bahkan tidak memerlukan tanda kurung siku.
Ini adalah praktik terbaik. Kita akan melalui sebuah contoh.
Anda juga dapat menginisialisasi hanya sebagian
dari array elemen bertipe char dengan string.
Jadi jika Anda benar-benar membuat ukuran yang sangat besar dan
Anda hanya menetapkan beberapa karakter, tidak apa-apa
juga, Anda hanya menginisialisasi beberapa karakter. Semua karakter lain hanya
akan kosong.
Jadi yang akan terjadi di sini adalah kompiler akan menginisialisasi lima elemen pertama.
Str nol ke str empat, semua
karakter string konstan dan kemudian string sub 5 akan
berisi karakter nol.
Ruang masih akan dialokasikan untuk semua 40
elemen dalam larik tetapi hanya lima yang akan digunakan, empat ditambah karakter nol.
Jadi sekali lagi, praktik terbaik Anda tidak benar-benar menentukan angka di dalam ukuran,
cukup tetapkan string literal dengan menggunakan tanda kutip ganda.
Itulah yang akhirnya akan Anda lihat.
Sekarang jika Anda tidak menginisialisasi dan Anda baru saja
membuat array karakter dengan ukuran, bagaimana Anda memasukkan tanggal di dalamnya.
Nah, karena itu array, Anda tidak bisa begitu saja menetapkan data.
Kita tahu bahwa jika kita memiliki array integer, kita
tidak bisa hanya menetapkan array integer nomor lima,
itu tidak masuk akal. Anda harus menentukan elemen yang sebenarnya.
Anda harus menentukan indeks.
Jadi Anda tidak dapat melakukan sesuatu seperti mendeklarasikan array karakter dengan 100 karakter dan kemudian
mengatakan s sama dengan halo. Itu tidak akan berhasil.
Karena, sekali lagi, s adalah sebuah array. Meskipun itu adalah string di dalam tanda kutip ganda, itu masih berupa array di memori.
Jadi, jika Anda melakukan operasi penugasan, Anda tidak dapat menetapkan
satu larik karakter ke larik karakter lain seperti di atas.
Jika Anda ingin menetapkan data ke
array karakter setelah Anda mendeklarasikannya dan setelah Anda menginisialisasinya, Anda harus
menggunakan fungsi khusus yang disebut str copy.
Dan kita akan membicarakannya di kuliah lain.
Jadi sampai saat ini, ketika Anda membuat string Anda, mereka akan menjadi string literal, mereka
akan berada di dalam tanda kutip ganda, dan Anda tidak akan pernah mengubahnya.
Jadi ini juga benar-benar valid. Anda sebenarnya bisa mengakses karakter
ini atau setiap elemen dalam array dengan indeks dan menentukan setiap karakter.
Jadi s sub 0, s sub 1 lalu masukkan satu karakter ke dalam tanda kutip tunggal.
Anda dapat menetapkannya seperti itu. Tapi bayangkan jika Anda memiliki string yang 100 byte.
Ini akan memakan banyak baris kode. Jadi Anda tidak ingin melakukan itu.
Apa yang ingin Anda lakukan adalah menginisialisasinya ketika
Anda mendeklarasikannya tanpa ukuran dan kemudian menentukan
apakah Anda ingin memodifikasinya dengan menyalinnya.
Sejauh menampilkan string sebagai output, kita masih akan menggunakan fungsi printf itu.
Saat Anda ingin merujuk ke string di mana saja di program Anda, Anda cukup
menggunakan nama array itu sendiri.
Anda tidak perlu menentukan indeks.
Karena indeks di dalam array akan menentukan satu karakter.
Jika Anda menginginkan seluruh string, Anda cukup menggunakan nama array.
Jadi jika Anda menggunakan fungsi printf untuk menampilkan output,
Anda cukup melakukan hal berikut. Di dalam tanda kutip
ganda, Anda akan menggunakan persen s sebagai penentu format Anda dan kemudian hanya nama array karakter.
Jadi Anda tidak memperlakukannya seperti array lain ketika Anda ingin mengaksesnya. Ketika Anda ingin mengaksesnya hanya nama tanpa indeks
atau tanda kurung yang sebenarnya.
Dan persen sebagai penentu format adalah untuk mengeluarkan
string yang diakhiri nol. Ingat sebelum kita menggunakan persen d untuk
bilangan bulat, Anda dapat menggunakan persen c untuk karakter.
Untuk string, Anda menggunakan persen s, dan itu adalah array karakter.
Ia mengharapkan beberapa string yang diakhiri null.
Jadi, bagaimanapun, Anda menginisialisasi string jika Anda melakukannya tanpa ukuran dan terminator nol
ditambahkan secara otomatis atau jika Anda
membuatnya dengan ukuran tertentu dan Anda menambahkannya atau jika Anda menambahkannya
secara eksplisit, itu tidak masalah. Itu hanya harus null dihentikan.
Fungsi printf mengasumsikan seseorang menemukan penentu format persen bahwa
argumen yang sesuai adalah string karakter yang diakhiri oleh karakter nol.
Itu yang diharapkan, jadi harus seperti itu.
Untuk memasukkan string, kita tahu cara
memasukkan kumpulan data lain melalui keyboard menggunakan scanf.
Kami akan melakukan hal yang sama untuk memasukkan string.
Kita akan menggunakan fungsi scanf. Dengan fungsi scanf, itu akan
menjadi cara yang sama kecuali Anda akan menggunakan penentu format yang berbeda.
Jadi untuk string, Anda akan menggunakan persen s sebagai input.
Dan itu digunakan untuk memasukkan string.
Hal lain yang perlu diperhatikan di sini adalah tidak ada ampersand untuk nama
variabel karena itu adalah karakter. Ingat, kami menyebutkan Anda hanya
perlu memberikan ampersand alamat operator pada string.
Alasannya adalah ketika kita berbicara tentang pointer akan lebih jelas.
Tetapi input char meskipun itu adalah
array karakter, itu adalah pointer, dan scanf sebagai argumen kedua mengambil pointer.
Dan itulah mengapa Anda tidak perlu melakukannya. Saat Anda mendeklarasikan bilangan bulat dan ganda, itu
bukan pointer dan. Jadi, jika
Anda ingin membaca input dari keyboard menggunakan scanf, argumen kedua mengharapkan pointer yang harus
Anda lewati di sebuah alamat.
Sekarang dengan scanf ketika Anda
melakukan string, scanf hanya akan membaca sampai spasi.
Jadi jika Anda melakukan scanf dan Anda mengetik Jason
adalah seorang instruktur.
Satu-satunya hal yang akan disimpan dalam input adalah Jason. Karena begitu menyentuh ruang
itu, ia tidak akan membaca sisa string.
Jadi ada fungsi lain yang dapat Anda gunakan untuk membaca seluruh string.
Beberapa contoh yang akan kita gunakan mungkin akan melakukannya. Anda dapat melakukan hal-hal seperti f get
s, yang merupakan cara lain untuk membaca input dari keyboard dan yang akan membaca
seluruh string terlepas dari spasi.
Tapi ada satu lagi yang saya pikir itu
disebut get underscore s untuk C11,
tapi kita akan membicarakannya lebih lanjut, tapi itu hanya satu hal yang
perlu diingat ketika Anda membaca input untuk string. Itu hanya akan membaca sampai spasi.
Bagaimana dengan menguji apakah dua string sama.
Nah, sampai saat ini, kami telah menguji
semua variabel untuk melihat apakah mereka sama, kami hanya menggunakan equals equals.
Tetapi dengan string, ini tidak akan berhasil.
Operator kesetaraan, ingat, kami mengatakan bahwa string adalah array karakter, jadi Anda tidak dapat menggunakan operator pada mereka.
Dan operator kesetaraan hanya dapat diterapkan pada int dan double
atau float atau karakter.
Itu tidak bekerja pada struktur atau array. Anda tidak dapat membandingkan dua array.
Jadi itu tidak akan bekerja dengan string. Jika Anda ingin menentukan apakah dua string
sama, Anda harus secara eksplisit membandingkan dua karakter string karakter demi karakter.
Jadi, Anda harus melihat setiap elemen dalam indeks
array berdasarkan indeks.
Namun, itu benar-benar masalah besar karena itu akan sangat membosankan.
Jadi kita akan berbicara tentang bagaimana Anda dapat melakukannya
dengan sangat mudah menggunakan fungsi str compare dari pustaka standar, tetapi
Anda tidak dapat menggunakan equals equals ingat itu.
Dan lagi, sebagai pengingat, saya sudah mengatakannya beberapa kali saya ingin mengatakannya lagi,
konstanta string x di dalam tanda kutip
ganda tidak sama dengan konstanta karakter x di dalam tanda kutip tunggal.
X di dalam tanda kutip tunggal adalah tipe dasar, itu hanya karakter
atau perawatan.
X di dalam tanda kutip ganda adalah tipe drive, ini adalah array tipe char.
X di dalam tanda kutip ganda benar-benar terdiri dari dua
karakter, x dan terminator nol, karakter nol, jadi ingatlah itu.
Berikut adalah contoh
bagaimana kita dapat membuat string baik
mendeklarasikannya dengan ukuran atau menginisialisasinya pada baris yang sama.
Sekarang ini adalah praktik terbaik. Jika Anda akan menggunakan literal string, apa
yang akan saya lakukan
adalah melakukan apa yang tertulis di sini, membuat array karakter, tidak menentukan
ukuran, dan kemudian di sebelah kanan operator penugasan memiliki tanda kutip ganda.
Kompiler akan secara otomatis membuat string yang tepat dan menambahkan terminator nol ke dalamnya.
Jika Anda menentukan ukuran dan kemudian Anda tidak memiliki cukup karakter, itu tidak akan menyimpannya.
Jadi buat saja karakter string literal dengan
menggunakan tipe data char, nama
variabel dan kemudian kosongkan tanda kurung.
Program ini akan saya pikir menghitung karakter
dalam array, jadi pada dasarnya akan mendapatkan panjang string.
Apa yang kami lakukan di sini adalah kami membuat variabel bernama count dalam dua array
karakter dengan dua string yang berbeda, menjadi atau tidak
menjadi dan kemudian koma itulah pertanyaannya.
Char str one akan memiliki alternator setelah b, dan
str akan memiliki alternatif setelah pertanyaan.
Jadi kita memiliki loop di sini yang akan
melalui array pertama, dari count sama dengan nol sampai kita melihat terminator nol.
Dan kita bisa menggunakan not equals dalam kasus ini karena kita membandingkan sebuah karakter.
Terminator nol sebagai karakter. Tidak apa-apa untuk membandingkan karakter.
Jadi loop while kita akan terus berlanjut sampai kita melihat terminator nol.
Setelah kita melihat terminator nol, kita akan melompat keluar.
Hitungan akan sama dengan jumlah karakter dalam string itu.
Jadi panjang tali itu.
Kami melakukannya untuk kedua string. Dan Anda akan melihat bahwa pada dasarnya
kedua senar akan memiliki panjang yang benar karena kita baru saja membahas masing-masing senar.
Untuk b atau tidak b akan menjadi sesuatu seperti
18 karakter.
Sekarang Anda tidak perlu melakukan hal seperti ini karena
kami memiliki fungsi pembantu yang bagus dengan panjang str untuk menemukan panjang string.
Tetapi sekali lagi, apa yang ditunjukkan ini adalah fakta bahwa itu adalah sebuah array.
Dan jika Anda ingin membandingkan atau menemukan panjang string, Anda dapat
menggunakan not equals dan melihat karakternya, terminator nol.
Saya harap ini membantu. Ini adalah bagaimana kita akan mendefinisikan dan menginisialisasi string literal.
Terima kasih.