158 lines
5.0 KiB
Markdown
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--- |