Halo, dan selamat datang kembali. Kuliah seru lainnya. Dalam kuliah ini,
kita akan berbicara lebih banyak tentang string
dan fungsi string, terutama kemampuan untuk mencari tokenize dan menganalisis string.
Jadi mari kita bahas beberapa fungsi string lagi. Mencari string.
Mencari string.
Semua fungsi ini akan berada di header string.
Ada beberapa fungsi pencarian string yang digunakan secara khusus di
mana Anda dapat menemukan karakter atau substring tertentu.
Nama dari fungsi tersebut adalah strchr
dan strstr.
Menemukan satu karakter atau substring di dalam string.
Kami akan memberikan beberapa contoh tentang itu.
Ada juga beberapa kemampuan untuk menandai string.
Anda dapat mengatakan apa itu tokenizing string. Pertama, Anda harus mendefinisikan apa itu token.
Token adalah urutan karakter dalam string yang dibatasi oleh pembatas.
Pembatas adalah sesuatu yang ada dalam string yang Anda
perhatikan memiliki arti khusus.
Jadi tokennya adalah jika Anda memiliki string yang lengkap, ini
adalah Jason dan dipisahkan oleh spasi.
Satu token bisa jadi ini, yang lain bisa jadi, yang lain bisa jadi Jason.
Ini adalah cara untuk mengambil seluruh string dan memisahkannya
dalam batas-batas tertentu berdasarkan pembatas.
Dan Anda ingin memastikan bahwa pembatas Anda bukanlah
sesuatu yang valid dalam string yang sebenarnya. Jadi Anda juga menggunakan pembatas
saat Anda membaca dari file, jenis konsep yang sama.
Di mana Anda memecah kalimat menjadi kata-kata, itu disebut tokenizing. Kita akan menggunakan fungsi
yang disebut strtok.
Saya juga ingin berbicara tentang beberapa analisis string. Ada banyak sekali,
banyak yang berbeda untuk memeriksa apakah karakter adalah
karakter huruf kecil atau karakter huruf besar
atau alfanumerik atau angka.
Ini terutama dilakukan pada karakter, tetapi karakter di string samping dan
Anda juga dapat menerapkannya ke seluruh string.
Sekarang kita masuk ke beberapa detail lebih lanjut tentang string.
Dan untuk memahami beberapa fungsi ini, kita harus berbicara sedikit tentang pointer.
Pointer adalah konsep besar dalam c.
Kita akan memiliki seluruh bagian yang dikhususkan untuk pointer.
Mungkin, yang berikutnya atau yang berikutnya.
Dan itu banyak diskusi. Ini mungkin topik bahasa yang paling membingungkan.
Saya tidak ingin membahasnya secara mendetail sekarang karena itu tidak relevan.
Saya hanya ingin menyentuhnya, hanya memberi Anda sedikit bocoran tentang apa itu pointer sehingga
Anda dapat memahami beberapa fungsi yang akan kita gunakan.
Itulah satu-satunya tujuan dari ini. Jadi jika Anda tidak sepenuhnya memahami
petunjuk pada saat ini setelah beberapa slide ini, jangan khawatir.
Jadi konsep pointer, sekali lagi, akan kita bahas secara detail nanti.
Tetapi untuk memahami beberapa fungsi string ini, saya ingin memberi Anda gambaran singkat.
C menyediakan tipe variabel yang sangat berguna, yang disebut pointer.
Aku sudah membicarakannya. Ini ada hubungannya dengan memori, dan alokasi memori.
Beberapa bahasa jika Anda telah memprogram sebelumnya dan Anda
tidak sepenuhnya baru dalam pemrograman, beberapa bahasa akan secara otomatis mengelola memori untuk Anda.
Mereka akan mengalokasikan memori untuk Anda dan menghapusnya, bahasa seperti Java melakukan ini.
Ini disebut pengumpul sampah. Bahasa seperti c tidak melakukan ini.
Jadi setiap kali Anda membuat memori untuk menggunakan
pointer, Anda harus menghapus memori itu.
Tapi apa pointer itu sangat
berguna dan apa itu variabel yang menyimpan alamat.
Alamat, ingat, adalah sesuatu dalam memori.
Biasanya heksadesimal.
Nilai dalam alamat berada di lokasi lain di memori.
Pointer hanya menunjuk ke alamat yang berisi nilai.
Dan kami sebenarnya telah menggunakan alamat di masa lalu dengan fungsi scanf.
Ingat, simbol ampersand yang kita gunakan itu adalah alamat operator.
Fungsi Scanf sebagai parameter kedua
harus mengambil variabel yang ingin Anda simpan
datanya, variabel itu harus berupa pointer.
Dan fungsi scanf mengharapkan sebuah pointer.
Untuk membuat integer dengan sendirinya, itu bukan pointer,
tetapi jika Anda mendapatkan alamatnya, sekarang menjadi pointer.
Jadi kami menggunakan ampersand untuk mendapatkan alamat tipe data primitif.
Jadi Anda sedikit akrab dengan konsep alamat.
Ingat, mulai sekarang dengan pointer, Anda membuat
nomor int dan itu bukan pointer
dan itu sama dengan 25.
Tetapi jika Anda mendapatkan ampersandnya, yang merupakan alamatnya, Anda dapat menetapkannya ke sebuah pointer.
Pointer memiliki sintaks khusus di c, tanda bintang mewakili pointer.
Jadi kita mendeklarasikan sebuah variabel number dengan nilai 25 dan kemudian
kita mendeklarasikan sebuah pointer menggunakan asterisk bernama pNumber, yang
berisi alamat dari angka tersebut.
Dan lagi, tanda bintang digunakan untuk mendeklarasikan pointer, begitulah cara Anda mengetahui
bahwa itu adalah tipe data pointer.
Untuk mendapatkan nilai variabel p number karena
p number adalah apa? Ini adalah pointer yang menunjuk ke alamat di memori.
Jika Anda hanya mencoba melihat nilai angka p, itu akan memberi Anda alamatnya.
Jika Anda ingin mendapatkan nilai dari apa yang ditunjuk oleh alamat tersebut, Anda harus melakukan de-referensi.
Jadi ada sintaks
khusus yang digunakan c yang disebut tanda bintang dan nama variabel, begitulah
cara Anda benar-benar dapat mengakses lokasi memori yang berisi nilai.
Jadi jika Anda ingin menetapkan data ke lokasi memori itu, Anda harus mengatakan bintang p nomor.
Sekali lagi efeknya adalah mengakses data yang disimpan di alamat yang ditentukan oleh pointer.
Jadi menjadi sangat membingungkan ketika kita berbicara tentang pointer karena Anda tidak terbiasa dengan konsep ini.
Anda pikir variabel memiliki nilai, itu saja. Tetapi variabel dapat memiliki alamat dan
alamat kemudian dapat memiliki nilai.
Slide ini mencoba menggambarkan apa yang baru saja saya sebutkan.
Saya menemukan ini di buku yang saya baca.
Ini adalah slide yang menunjukkan kepada Anda konsep pointer di memori dan
bagaimana segala sesuatunya bekerja dengan alamat.
Jadi saya agak mengulangi apa yang baru saja saya sebutkan.
Tetapi nilai dari ampersand number adalah alamat dimana nomor tersebut berada.
Jadi jika Anda memiliki dua variabel, angka
dan angka p, angka p adalah pointer, angka adalah
int, omong-omong, Anda juga harus menentukan tipe pointer.
Meskipun pointer adalah sebuah
alamat, Anda tetap menentukan jenis atau ke mana alamat tersebut menunjuk.
Jadi int bintang p nomor akan sama dengan alamat nomor.
Nomor ada di memori, dan menunjuk
ke alamat seribu misalnya dan memiliki nilai 25.
Nomor P memiliki alamat 105 untuk
nomor p yang sebenarnya, tetapi
nilai alamat itu adalah 1000 alamat.
Untuk mendapatkan nilai nomor p, Anda harus melakukan dereferensi 1000, yang akan
memberi Anda 25.
Alasan saya menyebutkan semua ini tentang
pointer karena banyak fungsi string akan mengembalikan pointer.
Ini tidak akan terlalu penting.
Ini hanya penting ketika Anda ingin memahami bagaimana Anda mendapatkan karakter tertentu di dalam array.
Tapi saya ingin menyebutkannya secara singkat.
Tidak apa-apa jika konsepnya tidak meresap sekarang karena kita akan membahasnya
secara mendetail di bagian selanjutnya.
Tetapi pahami bahwa fungsi string yang sekarang akan kita gunakan akan mengembalikan pointer dan
kemudian Anda mungkin akan menggunakan pengembalian itu untuk melakukan sesuatu yang berguna.
Di masa lalu ketika kami menggunakan salinan str dan str membandingkan,
kami mengirimkan pointer tetapi tidak pernah mengembalikan pointer, kami tidak pernah menggunakan pointer itu.
Sekarang kita harus menggunakan pointer, saya hanya ingin memberikan sedikit gambaran tentang apa artinya.
Pointer hanya akan menunjuk ke sebuah alamat.
Dan kemudian Anda dapat menggunakan alamat itu untuk melakukan parsing atau apa pun yang perlu Anda lakukan.
Jadi mudah-mudahan, ini tidak membanjiri Anda. Sekali lagi, jangan khawatir jika Anda tidak sepenuhnya memahaminya.
Sekarang kita akan membahas
beberapa contoh analisis, tokenizing, dan pencarian string.
Untuk mencari string, kami sebutkan, Anda akan menggunakan strchr atau strstr.
strchr mencari string yang diberikan untuk satu karakter.
Argumen pertama ke fungsi adalah string yang akan dicari,
yang akan menjadi alamat array karakter.
Argumen kedua adalah karakter yang Anda cari.
Kami akan memberikan contoh sebentar lagi. Jadi fungsi akan mencari
string mulai dari awal dan
mengembalikan pointer ke posisi pertama dalam string tempat karakter ditemukan.
Inilah sebabnya mengapa pointer penting sekarang karena
kami tidak mengembalikan seluruh nilai, kami mengembalikan pointer ke
karakter di dalam
string dan alamat itu mewakili indeks array, pada dasarnya.
Jadi alamat posisi ini di memori, itu adalah tipe karakter bintang
dan digambarkan sebagai penunjuk
ke karakter, yang sebenarnya hanya satu karakter di memori.
Untuk menyimpan nilai yang dikembalikan, Anda harus membuat variabel yang dapat menyimpan alamat karakter
sehingga Anda harus membuat pointer.
Jika karakter sekarang ditemukan, fungsi mengembalikan nilai khusus, yaitu null.
Null berarti pointer tidak menunjuk ke apapun.
Kami menggunakan null ketika kami berbicara tentang pointer, dan null
hanya mengatakan tidak menemukan apa pun. Jadi tidak mengarah ke apapun.
Ketika menunjuk ke sesuatu, itu menunjuk ke alamat di mana Anda menemukan karakter itu
dan kemudian Anda dapat mulai menguraikan dari sana.
Karena ingat dari kuliah sebelumnya,
ketika Anda membuat array karakter di memori,
Anda hanya memiliki setiap karakter yang direpresentasikan sebagai byte.
Dan jika Anda mengurai string
dan Anda ingin melihat di mana karakter tertentu dimulai dalam string itu, Anda
mengembalikan byte itu dan kemudian Anda bisa mulai mencari dari sana.
Jadi str char, cara menggunakannya adalah ini.
Anda mengatakan Anda membuat string karakter dan kami menginisialisasinya
di sini dengan rubah coklat cepat.
Kami kemudian membuat satu karakter dan kami menginisialisasi dengan q.
Kemudian kita membuat pointer karena kita harus membuat pointer karena itulah yang dikembalikan dari str char, itu yang
memungkinkan kita untuk melihat di mana dalam string itu kita menemukan karakter.
Kita akan menginisialisasi pointer kita ke null. Karena sekarang itu tidak akan mengarah ke apa pun.
Kemudian kita akan memanggil str char, kita akan memasukkan string kita yang merupakan rubah coklat cepat, dan
kita akan memasukkan karakter tunggal kita yaitu q.
Apa yang akan terjadi adalah dia akan melihat ke dalam rubah coklat cepat.
Dan pertama kali menemukan q, itu akan mengembalikan alamat q itu.
Jadi p got
char benar-benar akan menunjuk ke indeks keempat str.
Karena t adalah sub-nol, h adalah sub-satu, e adalah sub-dua,
ruang adalah sub-tiga, q adalah sub-empat.
Jadi p got char akan menunjuk ke q di rubah coklat cepat.
Jadi Anda bisa melihat dengan tepat di mana karakter itu dimulai dalam string itu.
Jadi argumen pertama untuk str char adalah alamat lokasi pertama yang akan dicari,
itulah string pencarian.
Argumen kedua adalah karakter yang dicari, karakter yang ingin dicari,
karakter tunggal.
Ia mengharapkan argumen kedua bertipe int.
Jadi secara teknis str char, argumen kedua masuk.
Tetapi c compiler akan secara otomatis mengonversi grafik menjadi int.
Ini akan mendapatkan nilai ASCII, pada dasarnya.
Jadi Anda benar-benar dapat mendefinisikan q
karakter tunggal alih-alih satu karakter, Anda dapat mendefinisikannya sebagai int.
Itu hanya teknis yang saya ingin Anda ketahui.
Tapi p got char akan menunjuk ke nilai quick brown fox
karena akan dimulai dari q dan kemudian akan menuju ke terminator nol jika Anda mencoba untuk mencetaknya.
Jadi itu akan menjadi rubah coklat cepat ketika Anda menjalankan contoh ini.
Ini adalah bagaimana Anda dapat mencari satu karakter di seluruh string.
Gunakan str char lalu gunakan pointer dan kemudian tampilkan pointer.
Dan bagaimana Anda menampilkan pointer itu? Dengan cara yang sama Anda menampilkan karakter lain, gunakan printf, persen s.
Jadi ini adalah mekanisme yang bagus untuk mencari karakter di seluruh string.
Jika Anda ingin mencari string di dalam string, yang akan menjadi substring,
Anda menggunakan strstr.
Ini mungkin yang paling berguna dari semua fungsi pencarian.
Itu mencari satu string untuk kemunculan substring.
Dan itu mengembalikan pointer ke posisi di string pertama di mana substring ditemukan,
sangat mirip dengan str char, tetapi mencari seluruh string. Jika tidak menemukan kecocokan, ia mengembalikan nol.
Argumen pertama adalah string yang akan dicari seperti str char.
Kedua adalah substring yang Anda cari, string lain. Jadi inilah contohnya.
Itu terlihat sangat mirip dengan yang lain kecuali alih-alih
mencari satu karakter, kami mencari kata, string.
Jadi kita punya kata, yang sama dengan anjing.
Dan kami memiliki teks yang setiap anjing memiliki harinya.
Kami membuat pointer kami lagi karena harus - inilah fungsi yang dikembalikan.
Saat kita memanggil strstr, kita memberikan teks string yang ingin kita lihat.
Dan kemudian argumen kedua adalah kata yang ingin kita lihat di dalam string itu.
Jadi itu akan mencari teks kemunculan pertama dari string yang disimpan di Word.
Anjing string muncul di karakter ketujuh dalam teks.
Jika Anda melihat teks.
Teks sub 6 akan sama dengan anjing, di situlah dimulai.
Jadi penunjuk akan menunjuk ke alamat teks plus 6 anjing, dan itu akan
mulai dari sana, dan kemudian akan menuju ke terminator nol.
Jadi p ditemukan akan menjadi anjing memiliki harinya.
Dan juga berhati-hatilah karena pencarian peka huruf besar/kecil.
Jika Anda benar-benar memberikan modal D-O-G, Anda tidak akan menemukan apa pun,
itu hanya akan mencari kasus yang benar.
Tapi ini digunakan untuk menemukan substring dan string, sangat berguna karena
sering kali dalam sebuah program Anda akan mengatakan melakukan string ini di
dalam string ini karena hampir mirip seperti grep jika Anda pernah menggunakan grep di Linux.
Saya harap ini masuk akal. Tokenisasi string.
Token adalah urutan karakter salah satunya string yang diikat oleh pembatas, kita tahu ini.
Pembatas bisa apa saja, tetapi harus sesuatu yang unik untuk string itu.
Tidak memiliki pembatas sebagai "A" karena sekarang akan menemukan dalam string itu
sesuatu yang valid dalam sebuah kata.
Buatlah sesuatu yang unik seperti spasi atau koma. Ini, sekali lagi, digunakan sebagai batas untuk
biasanya kata-kata dalam satu string.
Jadi itu memecah kalimat menjadi kata-kata, itu disebut tokenizing.
Fungsi strtok ini digunakan untuk tokenizing string.
Ini membutuhkan dua argumen.
String yang akan di-tokenized, yaitu seluruh string yang memiliki spasi dan pembatas.
Dan kemudian string yang berisi semua karakter terbatas positif.
Anda dapat menentukan apa yang ingin Anda tetapkan sebagai batas.
Jadi inilah contohnya.
Kami sedang membuat array karakter 80.
Ini mengatakan halo, apa kabar, Anda dasbor nama saya dasbor Jason.
Kami kemudian membuat string konstan yang mewakili pembatas, yang
merupakan minus, tanda hubung. Kelihatannya sedikit berbeda, tapi tetap saja minusnya, tanda hubung, keduanya
sama-sama tanda hubung.
Dan kemudian kita membuat pointer kita yang merupakan token.
Karena strtok akan mengembalikan
setiap token kita.
Jadi jika kita memanggil strtok kita dan kita
memasukkan string dan kita memasukkan pembatas
kita s, token akan sama dengan hal pertama yang ditemukannya.
Jadi pertama kali Anda memanggil strtok, itu akan sama dengan halo
bagaimana kabar Anda dan kemudian menemukan kecocokan dengan tanda hubung.
Dan jika Anda menelepon
untuk kedua kalinya, itu akan mencetak nama saya.
Jika Anda menyebutnya ketiga kalinya,
itu akan mencetak Jason karena melewati tanda hubung.
Jadi itu sebabnya kami memiliki loop sementara di sini. Kami mengatakan sementara token tidak sama dengan
nol, cetak token.
Dan kemudian kita mendapatkan token berikutnya dengan memanggil strtok.
Dan kami mengatakan null sebagai parameter pertama kami dan
s adalah parameter kedua kami dan
kemudian kami, kami tampilkan. Jadi mari kita lihat
ini dalam blok kode karena akan membuatnya lebih dimengerti.
Jadi mari kita membangun ini. Kami baru saja melalui contoh ini.
Saya ingin menunjukkan kepada Anda apa hasilnya, jadi jelas apa yang terjadi di sini.
Jadi di sini Anda akan melihat bahwa ia
mencetak token pertama yang merupakan halo apa kabar.
Hal pertama yang dilakukannya adalah
menemukan token pertama, mencetaknya, halo apa kabar, nama saya dan kemudian Jason.
Jadi sekarang kami memiliki halo apa kabar,
menemukan tanda hubung pertama, mencetaknya. Nama saya menemukan token berikutnya kemudian
yang ketiga adalah Jason. Tetapi Anda harus memanggil token
tiga kali untuk mendapatkan setiap token.
Yang pertama akan melakukan tokenize pada str.
Lihat yang berikutnya Anda dapat melewati nol karena Anda tidak ingin melihat lagi, Anda hanya ingin mendapatkan token berikutnya.
Jadi Anda memberikan nol yang kedua dan Anda baru saja lulus s.
Ini akan memberi Anda token berikutnya dari str yang sudah tok.
Jadi begitulah cara Anda dapat menggunakan strtok. Ini banyak membantu dengan parsing.
Anda dapat mengurai sesuatu dan mengeluarkan batasan tertentu.
Fungsi terakhir yang ingin saya bicarakan adalah fungsi string yang menganalisis ini.
Ada banyak sekali, jadi saya hanya menyediakan meja kecil di sini.
Apakah lebih rendah, adalah atas. Ia melakukan persis seperti yang Anda pikir akan dilakukannya.
Ini menguji untuk melihat apakah suatu karakter adalah huruf kecil atau huruf besar.
Kami sedang menguji karakter tertentu, tetapi karakter tersebut digunakan di dalam string.
Jadi argumen untuk masing-masing fungsi ini adalah karakter yang ingin Anda cari.
Dan kemudian semua fungsi ini mengembalikan nilai tipe int
bukan nol jika karakter berada dalam set yang sedang diuji.
Jadi kita akan melewati karakter int di dalam mencari kata-kata di dalam.
Jika kita memiliki huruf besar di dalam sebuah kata, itu akan memberi tahu kita
dan kita dapat menggunakannya untuk menguraikan elemen individu dengan cara karakter juga.
Jadi nilai yang dikembalikan akan dikonversi menjadi benar atau salah
sehingga Anda dapat menggunakannya sebagai Boolean juga, yang bagus.
Jadi lebih rendah akan mengembalikan true
jika kata atau karakter memiliki huruf kecil.
Nah, inilah contoh bagus yang
ingin saya jalankan, yang akan menghitung jumlah digit huruf di seluruh string.
Jadi mari kita jalankan ini karena ini akan
menjadi jelas, tetapi yang harus Anda perhatikan adalah kita membuat
buffer, buffer input kita dan kemudian kita membuat tiga bilangan bulat untuk dihitung.
Kami memberi tahu pengguna untuk memasukkan string
kurang dari begitu banyak karakter, lalu kami membacanya.
Kami kemudian akan melihat string itu untuk melihat
apakah itu berisi karakter tertentu.
Jadi kita akan mengulangi string itu dengan
melihat setiap indeks dalam array.
Jadi inilah contoh kita.
Sekali lagi, buffer adalah array karakter kita
yang akan menyimpan input. Kami akan menggunakan scanf untuk mengisinya.
Kita harus mengetikkan string kita tanpa spasi, itu adalah string tunggal.
Kami akan menjalankannya, menelusuri setiap elemen dalam buffer dan kemudian memanggil fungsi
is alpha, is digit atau punct untuk melihat apakah karakter-karakter
itu ada di sana, dan kemudian
akan bertambah berdasarkan apakah itu atau tidak. mengembalikan benar atau salah dan kemudian akan
menampilkan berapa banyak huruf, angka dan karakter tanda baca di dalam string itu.
Mari kita jalankan ini.
Saya hanya akan memasukkan sesuatu dengan banyak huruf
besar, mungkin beberapa digit.
Kemudian ketika saya menekan kembali, itu akan menghitung segalanya. Jadi katanya
kemudi saya berisi 24 huruf, 4 angka dan 1
karakter tanda baca, titik dua.
Program kecil yang bagus dan rapi yang menggunakan fungsi
karakter tersebut tetapi berguna dengan um menganalisis string karena itulah
yang Anda lakukan, Anda menganalisis string, tetapi Anda
hanya menelusuri karakter demi karakter. Terima kasih.