1 Character Strings
2 Topik String –Representation –Declaration –Functions –Kesalahan Umum –Index char dlm string
3 String Alami Mengingat: Main memory –Cell array yg berdekatan –Tiap cell punya alamat 0x1FFF0x20000x20010x20020x1FFE dst.
4 ch String Alami Recall: deklarasi variabel – “box” untuk suatu nilai Contoh: char ch; ch = ‘B’; 0x1FFF0x20000x20010x20020x1FFE dst. ‘B’
5 String Alami Contoh: char name[5]; Menentukan jmlh Cell dalam array Deklarasi String –set array of cells –Tiap cell berisi char –address pertama cell dlm array
6 String Alami Deklarasi String –set array of cells –Tiap cell berisi char –address pertama cell dlm array Contoh: char name[5]; 0x2000 0x2004 name is 0x2000
7 Character String Deklarasi 1: char name[5]; Deklarasi 2: #define MAXLENGTH 5 char name[MAXLENGTH]; 0x2000 0x2004 name is 0x2000
8 String Input/Output #include #define MAXLENGTH 15 int main() { char string1[MAXLENGTH]; char string2[MAXLENGTH]; scanf("%s %s", string1, string2); printf("%s %s\n", string1, string2); return 0; } Tidak ada ampersand (&)!
9 Character Strings Initialization: char nama[5] = “Ann”; Ann\0 Terminating Character: Tandai akhir string Special char: ’\0’ disbt NUL (single L) 0x2000 0x2004 nama is 0x2000
10 Character Strings Initialization: char name[5] = “Ann”; Dpt menyimpan setidaknya 4 huruf, Krn ada `\0’ Ann\0 0x2000 0x2004 name is 0x2000
11 Character Strings Deklarasi 3: char nama[] = “Ann”; memerlukan extra cell utk‘\0’ Ann\0 0x2000 0x2003 nama is 0x2000
12 Character Strings Deklarasi 4: char *nama = “Ann”; Hasilnya “undefined” Jika kita mencoba memodifikasi String ini. Ann\0 0x3000 0x3003 0x3000 nama
13 Character Strings Deklarasi 5: char nama[]; String dg panjang tidak tentu ? Tidak! Ini menyebabkan error.
14 Char dalam String Ukuran character string adalah tetap/fixed. Character pada posisi index: –string[index] –Karakter pertama ber-index 0
15 char nama[8] = “John”; int i = 2; printf(“Char pd index %d adlh %c.\n”, i, nama[i]); Char dalam String output: Char pd index 2 adlh h. index 0index 4 John\0 0x39950x399C nama is 0x3995
16 Char dalam String index 2 John\0 0x39950x399C nama is 0x3995 char nama[8] = “John”; nama[2] = ‘X’; printf(“Nama: %s\n”, nama);
17 JoXn\0 0x39950x399C name is 0x3995 output: Nama: JoXn index 2 char name[8] = “John”; name[2] = ‘X’; printf(“Name: %s\n”, name); A Char in a String
18 Operasi String #include Operasi: –Assignment: strcpy() –Concatenation: strcat() –Comparison: strcmp() –Length: strlen()
19 #include #define MAXLENGTH 100 int main() { char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Hello World!”); strcpy(string2, string1); return 0; } Operasi String: Assignment string1: string2:
20 Operasi String: Assignment #include #define MAXLENGTH 100 int main() { char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Hello World!”); strcpy(string2, string1); return 0; } string1: “Hello World!” string2:
21 Operasi String: Assignment #include #define MAXLENGTH 100 int main() { char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Hello World!”); strcpy(string2, string1); return 0; } string1: “Hello World!” string2: “Hello World!”
22 char nama1[5] = “Ann”; char nama2[5] = “Dave”; nama2 = nama1; Kesalahan umum Wrong Assignment Contoh 1: Error: “LValue required....”
23 char *nama1 = “Ann”; char *nama2 = “Dave”; nama2 = nama1; Kesalahan umum Bad Assignment Contoh 2: Lebih baik menghindari inisialisasi dg cara ini (Biasanya, tidak ada pesan error)
24 Kesalahan umum Bad Assignment Dave\0 0x39900x3994 Ann\0 0x20000x2003 0x2000 nama1 0x3990 nama2 char *nama1 = “Ann”; char *nama2 = “Dave”;
25 Kesalahan umum Bad Assignment Dave\0 0x39900x3994 Ann\0 0x20000x2003 0x2000 nama1 0x2000 nama2 nama2 = nama1;
26 Kesalahan umum Tidak cukup ruang Ann\0 0x2000 0x2003 char nama[] = “Ann”; strcpy(nama, “David”); nama is 0x2000
27 Common Mistake: Not enough space David\0 0x2000 0x2003 char name[] = “Ann”; strcpy(name, “David”); Perlu di perhatikan name is 0x2000
28 Operasi String: Concatenation char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Goodbye”); strcpy(string2, “, Cruel ”); strcat(string1, string2); strcat(string1, “World!”); string1: “Goodbye” string2: “, Cruel “
29 char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Goodbye”); strcpy(string2, “, Cruel ”); strcat(string1, string2); strcat(string1, “World!”); string1: “Goodbye, Cruel ” string2: “, Cruel “ Operasi String : Concatenation
30 string1: “Goodbye, Cruel, Cruel ” string2: “, Cruel “ Operasi String : Concatenation char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Goodbye”); strcpy(string2, “, Cruel ”); strcat(string1, string2); strcat(string1, “World!”);
31 string1: “Goodbye, Cruel, Cruel World!” string2: “, Cruel “ Operasi String : Concatenation char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Goodbye”); strcpy(string2, “, Cruel ”); strcat(string1, string2); strcat(string1, “World!”);
32 Kesalahan umum char nama[5]; strcpy(nama, “Ann”); strcat(nama, “ Smith”); Tidak cukup ruang Ann\0 0x2000 0x2004 nama is 0x2000
33 Kesalahan umum char nama[5]; strcpy(nama, “Ann”); strcat(nama, “ Smith”); Tidak cukup ruang AnnSmit 0x2000 0x2004 h\0 nama is 0x2000
34 strcpy(string1, “Apple”); strcpy(string2, “Wax”); if (strcmp(string1, string2) < 0) { printf(“%s %s\n”, string1, string2); } else { printf(“%s %s\n”, string2, string1); } output: Apple Wax String Operation: Comparison
35 strcpy(string1, “Apple”); strcpy(string2, “Wax”); if (strcmp(string1, string2) < 0) { printf(“%s %s\n”, string1, string2); } else { printf(“%s %s\n”, string2, string1); } Operasi String: Comparison Returns: negative jika string1 < string2 zero jika string1 == string2 Positive jika string1 > string2
36 strcpy(string1, “Apple”); strcpy(string2, “Wax”); if (string1 < string2) { printf(“%s %s\n”, string1, string2); } else { printf(“%s %s\n”, string2, string1); } Kesalahan Umum Wrong Comparison
37 output: 5 Jumlah char Sblm `\0’. char string1[100]; strcpy(string1, “Apple”); printf(“%d\n”, strlen(string1)); Operasi String: Length
38 Kesalahan umum char nama[5]; strcpy(nama, “David”); Tidak cukup ruang Jangan Lupa ‘\0’. David\0 0x39900x3994 nama is 0x3990
39 Character String sbg Parameter String sbg parameter formal dideklarasikan sbg char* atau char[] –Contoh: void Greet ( char* name ) void Greet ( char name[] ) Sbg pointer pada elemen pertama dari string (array of chars). Perubahan pada string di dalam function berpengaruh pada string aktual.
40 Contoh: hello3.c #include #define NAMELEN 50 /* Cetak pesan simpel user. */ void Greet ( char * name ) { strcat(name, "! Apa Kabar?"); } int main() { char user[NAMELEN]; printf("Apa Kabar? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; } user Jake\0
41 int main() { char user[NAMELEN]; printf("Apa Kabar? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; } Contoh: hello3.c #include #define NAMELEN 50 /* Cetak pesan simpeluser. */ void Greet ( char * name ) { strcat(name, "! Apa Kabar?"); } name user Jake\0
42 int main() { char user[NAMELEN]; printf("Apa Kabar? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; } Contoh: hello3.c #include #define NAMELEN 50 /* Cetak pesan simpeluser. */ void Greet ( char * name ) { strcat(name, "! Apa Kabar?"); } user Jake! Apa Kabar?\0 name
43 int main() { char user[NAMELEN]; printf("Apa Kabar? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; } Contoh: hello3.c #include #define NAMELEN 50 /* Cetak pesan simpeluser. */ void Greet ( char * name ) { strcat(name, "! Apa Kabar?"); } user Jake! Apa Kabar?\0
44 int main() { char user[NAMELEN]; printf("Apa Kabar? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; } Lebih lanjut dengan scanf Tidak ada (&) dlm scanf dg string!
45 Kesimpulan String = array character yg berdekatan String identifier adalah alamat karakter pertama dalam string. Karakter tungal dlm string di akses dg notasi str[index] Ada pustaka fungsi C utk meng-copy, concatenating dan comparing string.