Menguasai Penunjuk Karakter dan Penggunaan Fungsi di C
Apa itu Penunjuk Karakter di C?
Penunjuk karakter menyimpan alamat tipe karakter atau alamat karakter pertama dari array karakter (string). Penunjuk karakter sangat berguna saat Anda berupaya memanipulasi string.
Tidak ada tipe data string di C. Array tipe "char" dianggap sebagai string. Oleh karena itu, pointer dari array tipe char mewakili sebuah string. Pointer char ini kemudian dapat diteruskan sebagai argumen ke fungsi untuk memproses string.
Mendeklarasikan Penunjuk Karakter
Penunjuk karakter menunjuk ke karakter atau array karakter. Jadi, untuk mendeklarasikan penunjuk karakter, gunakan sintaks berikut:
char *pointer_name;
Menginisialisasi Penunjuk Karakter
Setelah mendeklarasikan penunjuk karakter, Anda perlu menginisialisasinya dengan alamat variabel karakter. Jika terdapat array karakter, Anda cukup menginisialisasi penunjuk karakter dengan memberikan nama array karakter atau alamat elemen pertamanya.
Penunjuk Karakter dari Karakter
Berikut ini adalah sintaks untuk menginisialisasi penunjuk karakter dari suatu tipe karakter:
char *pointer_name = &char_variable;
Penunjuk Karakter dari Array Karakter
Berikut ini adalah sintaks untuk menginisialisasi penunjuk karakter dari array karakter (string):
char *pointer_name = char_array;
/*or*/
char *pointer_name = &char_array[0];
Contoh Penunjuk Karakter
Dalam contoh berikut, kita memiliki dua variabel karakter dan array karakter. Kami mengambil dua variabel penunjuk untuk menyimpan alamat karakter dan array karakter, dan kemudian mencetak nilai variabel menggunakan penunjuk karakter.
#include <stdio.h>
int main() {
// Declare two variables
char x = 'P';
char arr[] = "TutorialsPoint";
// Declaring character pointers
char *ptr_x = &x;
char *ptr_arr = arr;
// Printing values
printf("Value of x : %c\n", *ptr_x);
printf("Value of arr: %s\n", ptr_arr);
return 0;
}
Keluaran
Jalankan kode dan periksa hasilnya −
Value of x : P
Value of arr: TutorialsPoint
Memahami Penunjuk Karakter
Sebuah string dideklarasikan sebagai array sebagai berikut −
char arr[] = "Hello";
String adalah array karakter yang diakhiri dengan NULL. Elemen terakhir dalam array di atas adalah karakter NULL (\0).
Deklarasikan pointer bertipe char dan berikan alamat karakter pada posisi ke-0 −
char *ptr = &arr[0];
Ingatlah bahwa nama array itu sendiri adalah alamat elemen ke-0.
char *ptr = arr;
Sebuah string dapat dideklarasikan menggunakan pointer dan bukan variabel array (tanpa tanda kurung siku).
char *ptr = "Hello";
Hal ini menyebabkan string disimpan di memori, dan alamatnya disimpan di ptr. Kita dapat melintasi string dengan menambah ptr.
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
Mengakses Array Karakter
Jika Anda mencetak array karakter menggunakan penentu format %s, Anda bisa melakukannya dengan menggunakan nama penunjuk karakter. Namun jika Anda ingin mengakses setiap karakter dari array karakter, Anda harus menggunakan tanda bintang (*) sebelum nama penunjuk karakter lalu menambahkannya.
Contoh
Berikut kode program selengkapnya −
#include <stdio.h>
int main(){
char arr[] = "Character Pointers and Functions in C";
char *ptr = arr;
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
}
Keluaran
Jalankan kode dan periksa hasilnya −
Character Pointers and Functions in C
Contoh
Alternatifnya, teruskan ptr ke printf() dengan format %s untuk mencetak string.
#include <stdio.h>
int main(){
char arr[] = "Character Pointers and Functions in C";
char *ptr = arr;
printf("%s", ptr);
}
Keluaran
Saat menjalankan kode ini, Anda akan mendapatkan keluaran yang sama−
Character Pointers and Functions in C
Fungsi Penunjuk Karakter
File header "string.h" mendefinisikan sejumlah fungsi perpustakaan yang melakukan pemrosesan string seperti mencari panjang string, menyalin string, dan membandingkan dua string. Fungsi-fungsi ini menggunakan argumen penunjuk char.
Fungsi strlen()
Fungsi strlen() mengembalikan panjangnya, yaitu jumlah karakter dalam sebuah string. Prototipe fungsi strlen() adalah sebagai berikut −
int strlen(char *)
Contoh 1
Kode berikut menunjukkan bagaimana Anda dapat mencetak panjang string −
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "Hello";
printf("Given string: %s \n", ptr);
printf("Length of the string: %d", strlen(ptr));
return 0;
}
Saat Anda menjalankan kode ini, ini akan menghasilkan keluaran berikut −
Given string: Hello
Length of the string: 5
Contoh 2
Secara efektif, fungsi strlen() menghitung panjang string sesuai fungsi yang ditentukan pengguna str_len() seperti yang ditunjukkan di bawah ini −
#include <stdio.h>
#include <string.h>
int str_len(char *);
int main(){
char *ptr = "Welcome to Tutorialspoint";
int length = str_len(ptr);
printf("Given string: %s \n", ptr);
printf("Length of the string: %d", length);
return 0;
}
int str_len(char *ptr){
int i = 0;
while(*ptr != '\0'){
i++;
ptr++;
}
return i;
}
Saat Anda menjalankan kode ini, ini akan menghasilkan keluaran berikut −
Given string: Welcome to Tutorialspoint
Length of the string: 25
Fungsi strcpy()
Operator penugasan ( =) tidak digunakan untuk menetapkan nilai string ke variabel string, yaitu penunjuk char. Sebagai gantinya, kita perlu menggunakan fungsi strcpy() dengan prototipe berikut −
char * strcpy(char * dest, char * source);
Contoh 1
Contoh berikut menunjukkan bagaimana Anda dapat menggunakan fungsi strcpy() −
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "How are you doing?";
char *ptr1;
strcpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
Fungsi strcpy() mengembalikan pointer ke string tujuan ptr1.
How are you doing?
Contoh 2
Secara internal, fungsi strcpy() mengimplementasikan logika berikut dalam fungsi str_cpy() yang ditentukan pengguna −
#include <stdio.h>
#include <string.h>
void str_cpy(char *d, char *s);
int main(){
char *ptr = "Using the strcpy() Function";
char *ptr1;
str_cpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
void str_cpy(char *d, char *s){
int i;
for(i = 0; s[i] != '\0'; i++)
d[i] = s[i];
d[i] = '\0';
}
Saat Anda menjalankan kodenya, output berikut akan dihasilkan −
Using the strcpy() Function
Fungsi ini menyalin setiap karakter dari string sumber ke tujuan hingga karakter NULL "\0" tercapai. Setelah loop, ia menambahkan karakter "\0" di akhir array tujuan.
Fungsi strcmp()
Operator perbandingan biasa (<,>, <=,>=, ==, dan !=) tidak boleh digunakan untuk membandingkan dua string. Sebagai gantinya, kita perlu menggunakan fungsi strcmp() dari file header "string.h". Prototipe fungsi ini adalah sebagai berikut −
int strcmp(char *str1, char *str2)
Fungsi strcmp() memiliki tiga kemungkinan nilai kembalian −
- Bila kedua string ditemukan identik, ia akan mengembalikan "0".
- Ketika karakter pertama yang tidak cocok di str1 memiliki nilai ASCII yang lebih besar daripada karakter terkait di str2, fungsi akan mengembalikan bilangan bulat positif. Artinya str1 muncul setelah str2 sesuai urutan abjad, seperti di kamus.
- Bila karakter pertama yang tidak cocok di str1 memiliki nilai ASCII yang lebih kecil dibandingkan karakter terkait di str2, fungsi akan mengembalikan bilangan bulat negatif. Artinya str1 muncul sebelum str2 sesuai urutan abjad, seperti di kamus.
Contoh 1
Contoh berikut menunjukkan bagaimana Anda dapat menggunakan fungsi strcmp() dalam program C−
#include <stdio.h>
#include <string.h>
int main(){
char *s1 = "BASK";
char *s2 = "BALL";
int ret = strcmp(s1, s2);
if (ret == 0)
printf("Both strings are identical\n");
else if (ret > 0)
printf("The first string appears after the second string \n");
else
printf("The first string appears before the second string \n");
return 0;
}
Jalankan kode dan periksa hasilnya −
The first string appears after the second string
Ubah s1 menjadi BACK dan jalankan kodenya lagi. Sekarang, Anda akan mendapatkan keluaran berikut −
The first string appears before the second string
Contoh 2
Anda bisa mendapatkan hasil serupa menggunakan fungsi yang ditentukan pengguna str_cmp(), seperti yang ditunjukkan pada kode berikut −
#include <stdio.h>
#include <string.h>
int str_cmp(char *str1, char *str2);
int main(){
char *s1 = "The Best C Programming Tutorial Available Online";
char *s2 = "The Best C Programming Tutorial Available Online";
int ret = str_cmp(s1, s2);
if (ret == 0)
printf("Both strings are identical\n");
else if (ret > 0)
printf("The first string appears after the second string\n");
else
printf("The first string appears before the second string\n");
return 0;
}
int str_cmp(char *str1, char *str2) {
while (*str1 != '\0' && *str2 != '\0') {
if (*str1 != *str2) {
return *str1 - *str2;
}
str1++;
str2++;
}
// If both strings are equal, return 0
return 0;
}
Saat Anda menjalankan kode ini, ini akan menghasilkan keluaran berikut −
Both strings are identical
Fungsi str_cmp() membandingkan karakter pada indeks yang sama dalam sebuah string hingga karakter di salah satu string habis atau karakternya sama.
Pada saat mendeteksi karakter yang tidak sama pada indeks yang sama, perbedaan nilai ASCIInya dikembalikan. Ia mengembalikan "0" ketika loop dihentikan.