sinau-c/content/strings.md

158 lines
5.0 KiB
Markdown

---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 <stdio.h>
#include <string.h>
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 <stdio.h>
#include <string.h>
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---