---LESSON_INFO--- **Learning Objectives:** - Memahami konsep string dalam bahasa C - Belajar mendeklarasikan dan menginisialisasi string - Mengenal fungsi-fungsi string dalam C - Memahami cara memanipulasi string **Prerequisites:** - Pemahaman tentang array dan pointer - Pemahaman dasar tentang program C ---END_LESSON_INFO--- # String dalam C ## Mendefinisikan string String dalam C sebenarnya adalah array dari karakter. Meskipun menggunakan pointer dalam C adalah subjek lanjutan, yang dijelaskan sepenuhnya nanti, kita akan menggunakan pointer ke array karakter untuk mendefinisikan string sederhana, dengan cara berikut: ```c char * name = "John Smith"; ``` Metode ini membuat string yang hanya bisa kita gunakan untuk membaca. Jika kita ingin mendefinisikan string yang bisa dimanipulasi, kita perlu mendefinisikannya sebagai array karakter lokal: ```c char name[] = "John Smith"; ``` Notasi ini berbeda karena mengalokasikan variabel array sehingga kita bisa memanipulasinya. Notasi kurung kosong `[]` memberi tahu kompiler untuk menghitung ukuran array secara otomatis. Ini sebenarnya sama dengan mengalokasikannya secara eksplisit, menambahkan satu ke panjang string: ```c char name[] = "John Smith"; /* sama dengan */ char name[11] = "John Smith"; ``` Alasan kita perlu menambahkan satu, meskipun string `John Smith` persis 10 karakter panjangnya, adalah untuk terminasi string: karakter khusus (sama dengan 0) yang menunjukkan akhir dari string. Akhir dari string ditandai karena program tidak tahu panjang string - hanya kompiler yang tahu menurut kode. ## Pemformatan string dengan printf Kita bisa menggunakan perintah `printf` untuk memformat string bersama dengan string lainnya, dengan cara berikut: ```c char * name = "John Smith"; int age = 27; /* mencetak 'John Smith is 27 years old.' */ printf("%s is %d years old.\\n", name, age); ``` Perhatikan bahwa ketika mencetak string, kita harus menambahkan karakter baris baru (`\\n`) sehingga perintah `printf` berikutnya akan mencetak di baris baru. ## Panjang String Fungsi 'strlen' mengembalikan panjang string yang harus dilewatkan sebagai argumen: ```c char * name = "Nikhil"; printf("%d\\n",strlen(name)); ``` ## Perbandingan String Fungsi `strncmp` membandingkan antara dua string, mengembalikan angka 0 jika mereka sama, atau angka yang berbeda jika mereka berbeda. Argumen-argumen adalah dua string yang akan dibandingkan, dan panjang maksimum perbandingan. Ada juga versi yang tidak aman dari fungsi ini yang disebut `strcmp`, tetapi tidak disarankan untuk menggunakannya. Sebagai contoh: ```c char * name = "John"; if (strncmp(name, "John", 4) == 0) { printf("Hello, John!\\n"); } else { printf("You are not John. Go away.\\n"); } ``` ## Penggabungan String Fungsi 'strncat' menambahkan n karakter pertama dari string src ke string tujuan di mana n adalah min(n,length(src)); Argumen yang dilewatkan adalah string tujuan, string sumber, dan n - jumlah maksimum karakter yang akan ditambahkan. Sebagai Contoh: ```c char dest[20]="Hello"; char src[20]="World"; strncat(dest,src,3); printf("%s\\n",dest); strncat(dest,src,20); printf("%s\\n",dest); ``` --- ## Tabel Fungsi String dalam C | Fungsi | Deskripsi | Contoh | |--------|-----------|--------| | strlen() | Menghitung panjang string | `strlen("hello")` mengembalikan 5 | | strcpy() | Menyalin string | `strcpy(dest, src)` | | strcat() | Menggabungkan string | `strcat(dest, src)` | | strcmp() | Membandingkan string | `strcmp(str1, str2)` | | strncmp() | Membandingkan n karakter string | `strncmp(str1, str2, n)` | | strncat() | Menggabungkan n karakter string | `strncat(dest, src, n)` | ---EXERCISE--- # Latihan: Manipulasi String Definisikan string `first_name` dengan nilai `John` menggunakan notasi pointer, dan definisikan string `last_name` dengan nilai `Doe` menggunakan notasi array lokal. **Requirements:** - Gunakan notasi pointer untuk first_name - Gunakan notasi array lokal untuk last_name - Pastikan string dapat dimanipulasi sesuai kebutuhan **Expected Output:** ``` Done! JohnBoe ``` Try writing your solution in the code editor below! ---EXPECTED_OUTPUT--- Done! JohnBoe ---END_EXPECTED_OUTPUT--- ---INITIAL_CODE--- #include #include int main() { /* definisikan first_name */ /* definisikan last_name */ char name[100]; last_name[0] = 'B'; sprintf(name, "%s %s", first_name, last_name); if (strncmp(name, "John Boe", 100) == 0) { printf("Done!\\n"); } name[0]='\0'; strncat(name,first_name,4); strncat(name,last_name,20); printf("%s\\n",name); return 0; } ---END_INITIAL_CODE--- ---SOLUTION_CODE--- #include #include int main() { char * first_name = "John"; char last_name[] = "Doe"; char name[100]; last_name[0] = 'B'; sprintf(name, "%s %s", first_name, last_name); if (strncmp(name, "John Boe", 100) == 0) { printf("Done!\\n"); } name[0]='\0'; strncat(name,first_name,4); strncat(name,last_name,20); printf("%s\\n",name); return 0; } ---END_SOLUTION_CODE---