Fungsi dan Array · Pelajaran 8 dari 12
String sebagai array char
9 menit baca · BelajarCode
C tidak punya tipe string khusus. String adalah array char yang diakhiri karakter nol '\0'. Karakter nol inilah yang menandai akhir string.
1#include <stdio.h>2#include <string.h>34int main(void) {5 char kota[] = "Bandung";6 printf("%s punya %zu huruf\n", kota, strlen(kota));7 printf("Ukuran array: %zu byte\n", sizeof(kota));8 printf("Huruf pertama: %c, terakhir: %c\n", kota[0], kota[strlen(kota) - 1]);9 return 0;10}Bandung punya 7 huruf Ukuran array: 8 byte Huruf pertama: B, terakhir: g
Array kota berukuran 8 byte: 7 huruf ditambah satu karakter '\0' di akhir.
Fungsi di string.h
| Fungsi | Gunanya | Catatan |
|---|---|---|
strlen(s) | Panjang string tanpa '\0' | |
strcmp(a, b) | Membandingkan dua string | Bernilai 0 jika sama |
strcpy(tujuan, asal) | Menyalin string | Tujuan harus cukup besar |
strcat(tujuan, asal) | Menyambung string | Tujuan harus cukup besar |
snprintf(buf, ukuran, ...) | Menulis teks berformat ke buffer | Tidak pernah melewati ukuran buffer |
1#include <stdio.h>2#include <string.h>34int main(void) {5 char sapaan[40];6 snprintf(sapaan, sizeof(sapaan), "Halo, %s!", "Dewi");7 printf("%s\n", sapaan);89 if (strcmp("admin", "admin") == 0) printf("Sama\n");10 if (strcmp("apel", "jeruk") < 0) printf("apel sebelum jeruk\n");11 return 0;12}Halo, Dewi! Sama apel sebelum jeruk
Jangan bandingkan string dengan ==
if (s == "admin") membandingkan alamat memori, bukan isi string, sehingga hasilnya hampir selalu salah. Selalu pakai strcmp.
Membaca satu baris dengan fgets
scanf("%s", ...) berhenti di spasi, sehingga nama "Dewi Lestari" hanya terbaca "Dewi". Untuk membaca satu baris penuh, pakai fgets.
1#include <ctype.h>2#include <stdio.h>3#include <string.h>45int main(void) {6 char nama[50];7 if (fgets(nama, sizeof(nama), stdin) == NULL) return 1;8 nama[strcspn(nama, "\n")] = '\0';910 for (int i = 0; nama[i] != '\0'; i++) {11 nama[i] = (char)toupper((unsigned char)nama[i]);12 }13 printf("Nama dalam huruf besar: %s\n", nama);14 return 0;15}Dewi Lestari
Nama dalam huruf besar: DEWI LESTARI
fgetsmembaca paling banyaksizeof(nama) - 1karakter, jadi tidak pernah melewati batas array.fgetsikut menyimpan karakter baris baru.strcspn(nama, "\n")mencari posisinya, lalu diganti'\0'.toupperdarictype.hmengubah satu karakter menjadi huruf besar.
Cek pemahaman
Berapa nilai strcmp("data", "data")?
Latihan
Hitung kata
Baca satu baris kalimat dengan fgets, lalu hitung banyaknya kata. Kata dipisahkan satu atau lebih spasi.
Pembahasan
1#include <ctype.h>2#include <stdio.h>34int main(void) {5 char kalimat[200];6 if (fgets(kalimat, sizeof(kalimat), stdin) == NULL) return 1;7 int kata = 0, di_dalam_kata = 0;8 for (int i = 0; kalimat[i] != '\0'; i++) {9 if (isspace((unsigned char)kalimat[i])) {10 di_dalam_kata = 0;11 } else if (!di_dalam_kata) {12 di_dalam_kata = 1;13 kata++;14 }15 }16 printf("Banyak kata: %d\n", kata);17 return 0;18}belajar bahasa C itu menyenangkan
Banyak kata: 5
Penanda di_dalam_kata mencatat apakah kita sedang berada di tengah kata. Kata baru dihitung setiap kali berpindah dari spasi ke karakter bukan spasi.
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler C online.