Anda di halaman 1dari 19

BAB II STRUKTUR DATA STRING

2.1 Pendahuluan
Struktur data string sebenarnya adalah struktur data array linier yang komponennya berjenis karakter (character) sehingga sering juga disebut sebagai deretan karakter (character string). Pada umumnya string digunakan untuk menyimpan data yang berbentuk teks (textual data) seperti sebuah kata, nama orang, judul lagu, atau paragraph. Dalam bahasa pemrograman C++ struktur data string didefinisikan sebagai deretan karakter yang disimpan dalam lokasi memori yang berurutan dan diakhiri oleh karakter \0 (null terminator). Operasi yang khusus didefinisikan untuk struktur data string dapat dilihat pada library function string.h. Karakter-karakter yang membentuk string atau teks diambil dari suatu himpunan karakter seperti karakter dalam bahasa latin (alfabet), karakter dalam bahasa Yunani, karakter dalam braille, dan sebagainya. Dalam dunia komputer, himpunan karakter yang digunakan adalah ASCII, EBCDIC atau Unicode.

2.2

Sistem Pengkodean
Untuk merepresentasikan himpunan karakter yang digunakan oleh manusia,

ada beberapa sistem pengkodean yang digunakan oleh komputer yaitu ASCII, EBCDIC dan yang terbaru, Unicode.

2.2.1

ASCII

ASCII (American Standard Code for Information Interchange) adalah sistem pengkodean yang paling umum digunakan oleh komputer. Dapat dikatakan ASCII adalah bahasa internasional komputer. Semua teks yang ditulis dalam ASCII dapat dibaca oleh komputer apapun. ASCII mula-mula terdiri dari 7 bit yang dapat merepresentasikan 128 karakter sebagai berikut: 1. 52 huruf yaitu A, B, ..., Z, a, b, c, ..., z,.

Bab II Struktur Data String : 16

Algoritma dan Pemrograman C++ Lanjut

2. 10 angka desimal yaitu 0, 1, 2, ..., 9. 3. 33 karakter khusus yaitu {, }, +, -, =, \, ., <, >, /, ?, :, ;, ', ",[, ], (, ), *, &, ^, %, $, #, @, !, ~, `, (spasi), |, _, ,. 4. 33 karakter kontrol, contohnya DEL, CR, LF dan lain-lain Untuk jelasnya representasi karakter dengan ASCII dapat dilihat pada tabel 2.1. Sesuai dengan perkembangan aplikasi komputer, ASCII 7-bit ini dirasakan tidak cukup sehingga dikembangkan menjadi 8 bit (atau 1 byte) yang dapat merepresentasikan 256 karakter dan disebut sebagai extended ASCII. Extended ASCII dikembangkan oleh pembuat aplikasi sesuai keperluan seperti dapat memuat karakter khusus untuk keperluan grafis, karakter dalam bahasa Yunani dan sebagainya. Tetapi akibatnya teks yang ditulis dengan extended ASCII ini tidak baku sehingga hanya dapat dibaca dengan sempurna oleh program aplikasi yang membuatnya.
-------------------------------------------Desimal Oktal Hex Biner Karakter -------------------------------------------000 000 00 00000000 NUL (Null char.) 001 001 01 00000001 SOH (Start of Header) 002 002 02 00000010 STX (Start of Text) 003 003 03 00000011 ETX (End of Text) 004 004 04 00000100 EOT (End of Transmission) 005 005 05 00000101 ENQ (Enquiry) 006 006 06 00000110 ACK (Acknowledgment) 007 007 07 00000111 BEL (Bell) 008 010 08 00001000 BS (Backspace) 009 011 09 00001001 HT (Horizontal Tab) 010 012 0A 00001010 LF (Line Feed) 011 013 0B 00001011 VT (Vertical Tab) 012 014 0C 00001100 FF (Form Feed) 013 015 0D 00001101 CR (Carriage Return) 014 016 0E 00001110 SO (Shift Out) 015 017 0F 00001111 SI (Shift In) 016 020 10 00010000 DLE (Data Link Escape) 017 021 11 00010001 DC1 (XON)(Device Control 1) 018 022 12 00010010 DC2 (Device Control 2) 019 023 13 00010011 DC3 (XOFF)(Device Control 3) 020 024 14 00010100 DC4 (Device Control 4) 021 025 15 00010101 NAK (Negative Acknowledgement) 022 026 16 00010110 SYN (Synchronous Idle) 023 027 17 00010111 ETB (End of Trans. Block) 024 030 18 00011000 CAN (Cancel) 025 031 19 00011001 EM (End of Medium) 026 032 1A 00011010 SUB (Substitute) 027 033 1B 00011011 ESC (Escape) 028 034 1C 00011100 FS (File Separator) 029 035 1D 00011101 GS (Group Separator) 030 036 1E 00011110 RS (Request to Send) (Record Separator) 031 037 1F 00011111 US (Unit Separator) 032 040 20 00100000 SP (Space) 033 041 21 00100001 ! (exclamation mark) 034 042 22 00100010 " (double quote) 035 043 23 00100011 # (number sign) 036 044 24 00100100 $ (dollar sign)

Tabel 2.1

Kode ASCII (0 - 127)

Bab II Struktur Data String : 17

Algoritma dan Pemrograman C++ Lanjut

037 045 25 00100101 % (percent) 038 046 26 00100110 & (ampersand) --------------------------------------------Tabel 2.1 (lanjutan) ------------------------------------------Desimal Oktal Hex Biner Karakter ------------------------------------------039 047 27 00100111 ' (single quote) 040 050 28 00101000 ( (left opening parenthesis) 041 051 29 00101001 ) (right closing parenthesis) 042 052 2A 00101010 * (asterisk) 043 053 2B 00101011 + (plus) 044 054 2C 00101100 , (comma) 045 055 2D 00101101 (minus or dash) 046 056 2E 00101110 . (dot) 047 057 2F 00101111 / (forward slash) 048 060 30 00110000 0 049 061 31 00110001 1 050 062 32 00110010 2 051 063 33 00110011 3 052 064 34 00110100 4 053 065 35 00110101 5 054 066 36 00110110 6 055 067 37 00110111 7 056 070 38 00111000 8 057 071 39 00111001 9 058 072 3A 00111010 : (colon) 059 073 3B 00111011 ; (semi-colon) 060 074 3C 00111100 < (less than sign) 061 075 3D 00111101 = (equal sign) 062 076 3E 00111110 > (greater than sign) 063 077 3F 00111111 ? (question mark) 064 100 40 01000000 @ (AT symbol) 065 101 41 01000001 A 066 102 42 01000010 B 067 103 43 01000011 C 068 104 44 01000100 D 069 105 45 01000101 E 070 106 46 01000110 F 071 107 47 01000111 G 072 110 48 01001000 H 073 111 49 01001001 I 074 112 4A 01001010 J 075 113 4B 01001011 K 076 114 4C 01001100 L 077 115 4D 01001101 M 078 116 4E 01001110 N 079 117 4F 01001111 O 080 120 50 01010000 P 081 121 51 01010001 Q 082 122 52 01010010 R 083 123 53 01010011 S 084 124 54 01010100 T 085 125 55 01010101 U 086 126 56 01010110 V 087 127 57 01010111 W 088 130 58 01011000 X 089 131 59 01011001 Y 090 132 5A 01011010 Z 091 133 5B 01011011 [ (left opening bracket) 092 134 5C 01011100 \ (back slash) 093 135 5D 01011101 ] (right closing bracket) 094 136 5E 01011110 ^ (caret cirumflex) 095 137 5F 01011111 _ (underscore) 096 140 60 01100000 ` 097 141 61 01100001 a 098 142 62 01100010 b 099 143 63 01100011 c 100 144 64 01100100 d 101 145 65 01100101 e 102 146 66 01100110 f 103 147 67 01100111 g 104 150 68 01101000 h 105 151 69 01101001 i 106 152 6A 01101010 j

Bab II Struktur Data String : 18

Algoritma dan Pemrograman C++ Lanjut

107 153 6B 01101011 k 108 154 6C 01101100 l --------------------------------------------Tabel 2.1 (lanjutan) ------------------------------------------Desimal Oktal Hex Biner Karakter ------------------------------------------109 155 6D 01101101 m 110 156 6E 01101110 n 111 157 6F 01101111 o 112 160 70 01110000 p 113 161 71 01110001 q 114 162 72 01110010 r 115 163 73 01110011 s 116 164 74 01110100 t 117 165 75 01110101 u 118 166 76 01110110 v 119 167 77 01110111 w 120 170 78 01111000 x 121 171 79 01111001 y 122 172 7A 01111010 z 123 173 7B 01111011 { (left opening brace) 124 174 7C 01111100 | (vertical bar) 125 175 7D 01111101 } (right closing brace) 126 176 7E 01111110 ~ (tilde) 127 177 7F 01111111 DEL (delete)

-----------------------------------------

2.2.2

EBCDIC

Berbeda dengan ASCII, EBCDIC (Extended Binary Coded Decimal Interchange Code) adalah sistem kode yang terdiri dari 8 bit sehingga dapat merepresentasikan 256 karakter yang terdiri dari karakter cetak dan karakter kontrol (lihat tabel 2.2).
Tabel 2.2 Kode EBCDIC
-------------------------------------------------------------------------------Dec Hex Code Dec Hex Code Dec Hex Code Dec Hex Code -------------------------------------------------------------------------------0 00 NUL 32 20 BS 64 40 space 96 60 1 01 SOH 33 21 SOS 65 41 97 61 / 2 02 STX 34 22 FS 66 42 98 62 3 03 ETX 35 23 67 43 99 63 4 04 PF 36 24 BYP 68 44 100 64 5 05 HT 37 25 LF 69 45 101 65 6 06 LC 38 26 ETB 70 46 102 66 7 07 DEL 39 27 ESC 71 47 103 67 8 08 GE 40 28 72 48 104 68 9 09 RLF 41 29 73 49 105 69 10 0A SMM 42 2A SM 74 4A 106 6A | 11 0B VT 43 2B CU2 75 4B . 107 6B , 12 0C FF 44 2C 76 4C < 108 6C % 13 0D CR 45 2D ENQ 77 4D ( 109 6D _ 14 0E SO 46 2E ACK 78 4E + 110 6E > 15 0F SI 47 2F BEL 79 4F | 111 6F ? 16 10 DLE 48 30 80 50 & 112 70 17 11 DC1 49 31 81 51 113 71 18 12 DC2 50 32 SYN 82 52 114 72 19 13 TM 51 33 83 53 115 73 20 14 RES 52 34 PN 84 54 116 74 21 15 NL 53 35 RS 85 55 117 75 22 16 BS 54 36 UC 86 56 118 76 23 17 IL 55 37 EOT 87 57 119 77 24 18 CAN 56 38 88 58 120 78 25 19 EM 57 39 89 59 121 79 26 1A CC 58 3A 90 5A ! 122 7A : 27 1B CU1 59 3B CUB 91 5B $ 123 7B # 28 1C IFS 60 3C DC4 92 5C * 124 7C @ 29 1D IGS 61 3D NAK 93 5D ) 125 7D 30 1E IRS 62 3E 94 5E ; 126 7E =

Bab II Struktur Data String : 19

Algoritma dan Pemrograman C++ Lanjut

31 1F IUS 63 3F SUB 95 5F ^ 127 7F " --------------------------------------------------------------------------------------------------------------------------------------------------------------Dec Hex Code Dec Hex Code Dec Hex Code Dec Hex Code -------------------------------------------------------------------------------128 80 160 A0 192 C0 { 224 E0 \ 129 81 a 161 A1 ~ 193 C1 A 225 E1 130 82 b 162 A2 s 194 C2 B 226 E2 S 131 83 c 163 A3 t 195 C3 C 227 E3 T 132 84 d 164 A4 u 196 C4 D 228 E4 U 133 85 e 165 A5 v 197 C5 E 229 E5 V 134 86 f 166 A6 w 198 C6 F 230 E6 W 135 87 g 167 A7 x 199 C7 G 231 E7 X 136 88 h 168 A8 y 200 C8 H 232 E8 Y 137 89 i 169 A9 z 201 C9 I 233 E9 Z 138 8A 170 AA 202 CA 234 EA 139 8B 171 AB 203 CB 235 EB 140 8C 172 AC 204 CC 236 EC 141 8D 173 AD 205 CD 237 ED 142 8E 174 AE 206 CE 238 EE 143 8F 175 AF 207 CF 239 EF 144 90 176 B0 208 D0 } 240 F0 0 145 91 j 177 B1 209 D1 J 241 F1 1 146 92 k 178 B2 210 D2 K 242 F2 2 147 93 l 179 B3 211 D3 L 243 F3 3 148 94 m 180 B4 212 D4 M 244 F4 4 149 95 n 181 B5 213 D5 N 245 F5 5 150 96 o 182 B6 214 D6 O 246 F6 6 151 97 p 183 B7 215 D7 P 247 F7 7 152 98 q 184 B8 216 D8 Q 248 F8 8 153 99 r 185 B9 217 D9 R 249 F9 9 154 9A 186 BA 218 DA 250 FA 155 9B 187 BB 219 DB 251 FB 156 9C 188 BC 220 DC 252 FC 157 9D 189 BD 221 DD 253 FD 158 9E 190 BE 222 DE 254 FE 159 9F 191 BF 223 DF 255 FF --------------------------------------------------------------------------------

Tabel 2.2

(lanjutan)

Pada tahun 1964 EBCDIC mulai digunakan oleh komputer IBM mainframe seri IBM/360 lalu seri IBM/370. Selain IBM perusahaan komputer lain seperti Hawlett Packard dan Fujitsu juga menggunakan EBCDIC untuk komputer mainframe-nya. Sekarang EBCDIC tidak banyak digunakan lagi karena representasi karakternya tidak berurutan dan ada beberapa tanda baca yang tidak direpresentasikan dalam EBCDIC.

2.2.3

Unicode

Unicode adalah sistem pengkodean yang paling baru dan mulai banyak digunakan seiring dengan makin murahnya harga memori komputer. Mungkin tidak lama lagi Unicode akan menggantikan ASCII sebagai bahasa internasional komputer. Unicode terdiri dari 16 bit (2 byte) sehingga dapat merepresentasikan hampir semua bahasa di dunia seperti bahasa Arab, Jepang, Thai, Yunani dan lainlain. Banyaknya karakter yang dapat direpresentasikan oleh Unicode adalah 65.536 (216) karakter. Sekarang ini aplikasi pengolah kata sudah menggunakan Unicode tetapi

Bab II Struktur Data String : 20

Algoritma dan Pemrograman C++ Lanjut

tidak dibakukan seperti ASCII sehingga suatu teks yang ditulis dengan menggunakan suatu aplikasi belum tentu dapat dibaca dengan sempurna oleh aplikasi lain.

2.2.4

Representasi karakter dalam memori


Karakter direpresentasikan dalam deretan bit yang tergantung dari sistem

pengkodean yang digunakan. Setiap sistem pengkodean mempunyai urutan representasi bit masing-masing, sebagai contoh (lihat tabel 2.1 dan 2.2): a. Pada sistem pengkodean ASCII 7-bit, karakter A direpresentasikan oleh deretan bit: 1 0 0 0 0 0 1 26 25 24 23 22 21 20 atau angka desimal = 65 b. Pada sistem pengkodean EBCDIC, karakter A direpresentasikan oleh deretan bit: 1 1 0 0 0 0 0 1 27 26 25 24 23 22 21 20 atau angka desimal = 193 Untuk keseragaman representasi, maka pembahasan string selanjutnya akan digunakan sistem pengkodean ASCII untuk merepresentasikan karakter.

2.2.5

Collating sequence
Collating sequence adalah posisi atau urutan karakter dalam himpunan

karakter. Setiap karakter mempunyai posisi tertentu dalam himpunannya. sebagai contoh karakter A dalam himpunan karakter alfabet menempati posisi pertama, karakter B menempati posisi ke dua, dan seterusnya. Collating sequence ini digunakan untuk menentukan representasi bit dari suatu karakter. Karakter yang posisinya di depan mempunyai nilai representasi yang lebih kecil dari pada karakter yang posisinya di belakang. Untuk jelasnya dapat dilihat pada representasi bit di tabel 2.1 dan 2.2. Collating sequence digunakan untuk membandingkan 2 karakter yaitu jika c1 dan c2 adalah dua karakter yang berbeda, maka c1 < c2 jika nilai ekuivalen biner dari c1 lebih kecil dari nilai ekuivalen biner dari c2. Sebagai contoh: a. b. Pernyataan: Pernyataan: A < B menghasilkan nilai true E < A menghasilkan nilai false Bab II Struktur Data String : 21

Algoritma dan Pemrograman C++ Lanjut

2.3

Konsep dan Terminologi


Konstanta string (string constant atau string literal) didefinisikan sebagai

deretan karakter yang ditulis di antara tanda petik. Contohnya adalah sebagai berikut: a. Siapa nama anda?. b. Fakultas Teknologi Informasi c. Kode pos: 11440 d. Jakarta Konstanta string dalam program C++ disimpan dalam memori yang berurutan dan diakhiri dengan karakter null (\0) seperti gambar 2.1 berikut. J a k a r t a \0

Gambar 2.1 Representasi konstanta string dalam program C++ Dalam hal-hal tertentu sifat dan operasi string analog dengan sistem bilangan sehingga sifat dan operasi pada sistem bilangan dapat diambil untuk mendefinisikan sifat dan operasi string seperti closure, asosiatif, identitas, operasi penugasan dan operasi logika.

2.3.1

Closure

Sifat closure untuk string didefinisikan sebagai berikut: Jika x dan y adalah karakter maka (x y) adalah karakter, dengan O adalah operasi penggabungan/penyambungan (concatenation) yang analog dengan operasi + pada sistem bilangan. Sebagai contoh : a. b. abc def = abcdef infor O matika = informatika

2.3.2

Asosiatif

Sifat asosiatif untuk string didefinisikan sebagai berikut: Jika x, y dan z adalah karakter maka (x y) z = x (y z) = x y z.

Bab II Struktur Data String : 22

Algoritma dan Pemrograman C++ Lanjut

Sebagai contoh : a. (abc def) ghi = abc (def ghi) = abc def ghi = abcdefghi b. (in O format) O ika = in O (format O ika) = in O format O ika = informatika

2.3.3

Identitas

Sifat identitas dari string didefinisikan sebagai berikut: Jika x adalah karakter maka ada karakter i yang merupakan identitas dari sistem sehingga untuk setiap x berlaku: x i = x. Identitas dari sistem string adalah karakter atau null. Sebagai contoh: a. b. abc = abc teknologi O = teknologi

2.3.4

Operasi penugasan

Operasi penugasan (assignment) digunakan untuk memasukkan konstanta string ke dalam suatu variabel string. Jika A, B, dan C adalah variabel yang berjenis string, maka berlaku operasi penugasan sebagai berikut: A = Tekno B = Informasi C = A logi B dengan demikian variabel C akan berisi string TeknologiInformasi. Untuk memudahkan pembacaan string, maka karakter spasi ditulis secara eksplisit dengan menggunakan simbol .

2.3.5

Operasi logika

Sama seperti sistem bilangan, string juga mengenal operasi logika yang hasilnya adalah konstanta logika TRUE atau FALSE. Operator yang digunakan adalah operator relasional ==, !=, >, >=, <, dan <=. Operasi ini biasanya digunakan untuk mengurutkan data string seperti kamus, daftar nama pelanggan dan sebagainya.

Bab II Struktur Data String : 23

Algoritma dan Pemrograman C++ Lanjut

Uji kesamaan untuk sistem string menggunakan operator == dan didefinisikan sebagai berikut: Jika x dan y adalah variabel string dengan x = x1...xn dan y = y1...ym maka x == y jika jika dan hanya jika: 1. Banyaknya karakter pada x dan y sama atau n == m 2. xi == yi untuk setiap 1<= i <= n Sebagai contoh pernyataan: a. b. c. abc == abc abc == abc true false, karena panjang string berbeda

abcd == abce false, karena d != e Uji ketidaksamaan pada sistem string menggunakan operator relasional <, , >,

dan !=. Hasil dari uji ketidaksamaan ini tergantung pada posisi karakter dalam collating sequence-nya. Untuk sistem pengkodean ASCII collating sequence-nya dapat dilihat pada tabel 2.1. Sebagai contoh pernyataan: a. b. c. Bill < Billy Science > Science abcd < abce true true true

2.4
a. b. c. d. e.

Operasi String
Beberapa operasi yang didefinisikan untuk struktur data string adalah:

mendeklarasikan string menghitung panjang string (banyaknya karakter yang menyusun string) menggabungkan (concatenation) 2 buah string menjadi sebuah string menyalin sebagian string mencari keberadaan suatu string dalam string yang lain

2.4.1

Mendeklarasikan string

Mendeklarasikan string adalah mendefinisikan suatu variabel berjenis string untuk menyimpan konstanta string. Statement untuk mendeklarasikan string sama

Bab II Struktur Data String : 24

Algoritma dan Pemrograman C++ Lanjut

seperti statement untuk mendeklarasikan array 1 dimensi yang berjenis karakter. Sebagai contoh: char NAMA[10] NAMA adalah variabel string yang dapat menyimpan paling banyak 9 karakter. Tempat yang terakhir digunakan untuk menyimpan karakter \0 yang menunjukkan akhir dari string. Ilustrasi pada gambar 2.2 di bawah ini menunjukkan variabel NAMA berisi string ADIANTO. Tanda ? setelah karakter \0 menunjukkan bahwa pada indeks tersebut tidak digunakan untuk menyimpan data karena string telah berakhir di indeks 7.

NAMA: A

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

indeks array

Gambar 2.2 Ilustrasi penyimpanan varibael string dalam array linier Dari ilustrasi di atas, dapat disimpulkan bahwa perlu kehati-hatian dalam menentukan banyaknya lokasi memori yang akan digunakan untuk menyimpan string ketika mendeklarasikan variabel string. Jika terlalu banyak maka akan ada memori yang tidak terpakai, tetapi jika terlalu sedikit maka konstanta string tidak dapat disimpan dengan sempurna.

2.4.2

Menghitung panjang string

Untuk menghitung panjang string dapat digunakan fungsi yang sudah disediakan yaitu fungsi LENGTH(str). Hasil dari fungsi ini adalah bilangan integer. Sebagai contoh lihat ekspresi berikut ini. Variabel S dan T adalah variabel integer. a. b. S = LENGTH(ComputerScience) T = 2 + 3 + LENGTH(ComputerScience) S = 16 T = 21

2.4.3

Menggabung string

Operasi menggabungkan atau menyambung 2 string menjadi sebuah string yang baru menggunakan simbol . Pada built in function operasi ini didefinisikan dalam fungsi CONCAT(str1, str2). Hasil dari fungsi ini adalah str1 yang berisi str1 mula-

Bab II Struktur Data String : 25

Algoritma dan Pemrograman C++ Lanjut

mula yang disambung dengan str2. Sebagai contoh lihat ekspresi berikut ini. Variabel X dan Y adalah variabel string. a. b. X = Mic key Mouse X = MickeyMouse

Y = CONCAT(Mic, CONCAT(key, Mouse)) Y = MickeyMouse

2.4.4

Menyalin sebagian string

Operasi untuk menyalin sebagian string akan menghasilkan string baru yang isinya adalah sebagian karakter dari string yang sudah ada. Operasi ini menggunakan built in function SUB(a1, a2, a3) dengan a1 : string yang sudah ada a2 : posisi tempat mulainya pengambilan a3 : banyaknya karakter yang diambil Sebagai contoh lihat ekspresi berikut ini. S dan T adalah variabel string. a. b. S = SUB(EdmontonAlberta, 6, 3) S = ton

T = SUB(Edmonton, 3, 4) SUB(PortCredit, 6, 2) SUB(Calgary, 2, 2) T = mont O re O al T = montreal

Yang perlu diperhatikan dalam menggunakan fungsi sub(a1, a2, a3): 1. Jika a3 0 maka akan menghasilkan string kosong. 2. Jika a2 0 maka akan menghasilkan string kosong. 3. Jika a2 > k, dengan k = LENGTH(a1) maka akan menghasilkan string kosong. 4. Jika a2 + a3 > k + 1, dengan k = LENGTH(a1) maka a3 diasumsikan sama dengan k - a2 + 1.

2.4.5

Mencari keberadaan suatu string

Operasi untuk mencari suatu string (atau disebut pola) dalam string yang lain disebut sebagai pattern matching. Operasi ini dilakukan dengan built in function MATCH(S,P), dan menghasilkan bilangan integer yang menunjukkan posisi awal dari string P dalam string S atau angka 0 jika string P tidak ada dalam string S. String

Bab II Struktur Data String : 26

Algoritma dan Pemrograman C++ Lanjut

P adalah pola yang dicari (pattern string) dan string S adalah string tempat pencarian (subject string) dilakukan. Setelah string P ditemukan, maka pencarian selesai. Sebagai contoh lihat ekspresi berikut ini. A dan B adalah veriabel integer. a. A = MATCH(ABCD, ) A = 0 karena dalam string ABCD tidak ada pola (karakter) b. B = MATCH(XYXYZYZXYZ, XYZ) B = 3 karena pola XYZ

ditemukan pada posisi 3 dalam string XYXYZYZXYZ.

2.5

Operasi String dalam Bahasa Pemrograman C++


Karena string merupakan struktur data yang umum digunakan maka beberapa

bahasa pemrograman sudah mendefinisikan operasi string dalam library function. Dalam bahasa pemrograman C++, variabel string didefinisikan sebagai array yang berjenis karakter. Meskipun demikian, bahasa pemrograman C++ sudah mendefinisikan operasi-operasi string dalam library function string.h, beberapa diantaranya adalah: a. b. c. strcpy(str1, str2): menyalin string str2 ke str1. Biasanya digunakan untuk memberikan (assign) nilai ke variabel string str1 strcat(str1, str2): menyambungkan string str2 ke str1 strcmp(str1, str2): membandingkan apakah string str1 sama dengan str2, hasilnya adalah nilai negatif (integer) jika str1 < str2 atau 0 jika str1 == str2 atau nilai positif jika str1 > str2. d. e. strlen(str): menghitung panjang string str, tidak termasuk null terminator. strstr(str1, str2): menghasilkan posisi str2 dalam str1, atau angka nol jika str2 tidak ada dalam str1.

2.6

Aplikasi Operasi String


Sebagai contoh aplikasi string akan dibahas beberapa masalah yaitu:

a. Memisahkan nama menjadi nama depan dan nama keluarga b. Menghitung frekuensi suatu huruf dalam suatu string

Bab II Struktur Data String : 27

Algoritma dan Pemrograman C++ Lanjut

c. Mengubah nama lengkap menjadi nama keluarga dengan inisial.

2.6.1

Memisahkan

nama

menjadi

nama

depan

dan

nama keluarga
Program ini menerima input berupa nama yang terdiri dari 2 kata yang dipisah dengan spasi, lalu program akan memisahkan nama tersebut menjadi nama depan dan nama keluarga. Sebagai contoh, nama yang diinput adalah Justin Beiber maka outputnya adalah:
Nama depan anda adalah Justin Nama keluarga anda adalah Beiber

Karakter spasi digunakan sebagai tanda pemisah antara kata pertama dan kata kedua.
Algoritma PisahNama Algoritma untuk mememisahkan nama yang terdiri dari 2 buah kata menjadi nama depan dan nama keluarga. NAMA adalah variabel string untuk menyimpan input. ND adalah variabel string yang menyimpan nama depan (kata pertama). NK adalah variabel string yang menyimpan nama keluarga (kata kedua). Diasumsikan panjang nama tidak lebih dari 40 karakter, serta panjang nama depan dan nama keluarga masing-masing tidak lebih dari 20 karakter. [deklarasi variabel string] char NAMA[41] char ND[21] char NK[21] 1. [menuliskan pesan] Write (Ketikkan nama depan dan nama keluarga anda) Write (pisahkan dengan spasi) 2. [membaca input] Read (NAMA) 3. [inisialisasi variabel] i=0 4. [mencari lokasi karakter spasi untuk mendapatkan nama depan] While (NAMA[i] != ) { ND[i] = NAMA[i] i++ } 5. [menambahkan karakter null] ND[i+1] = \0 6. [inisialisasi variabel, mulai dari kata yang kedua] i = i+1 j=0 7. [mencari lokasi karakter null]

Bab II Struktur Data String : 28

Algoritma dan Pemrograman C++ Lanjut

While (NAMA[i] != \0) { NK[j] = NAMA[i] i++ j++ } 8. [menambahkan karakter null] NK[J+1] = \0 9. [mencetak hasil] Write (Nama depan anda adalah , ND) Write (Nama keluarga anda adalah , NK) 10. [selesai] halt

2.6.2

Menghitung string

frekuensi

suatu

huruf

dalam

Frekuensi yang dimaksud disini adalah persentasi banyaknya suatu huruf dalam suatu string. Sebagai contoh, diketahui string S = ada apa?, maka frekuensi dari huruf a dalam string S adalah banyaknya huruf a yang ada dalam string S dibagi dengan total banyaknya huruf dalam string S, atau 4/6 x 100% = 66.67%. Dan frekuensi dari huruf d dan p masing-masing adalah 1/6 x 100% = 16.67%. Untuk menyimpan frekuensi digunakan array linier yang indeksnya menunjukkan posisi suatu huruf dalam himpunan alfabet. Sebagai contoh, pada indeks 3 disimpan frekuensi dari huruf c karena dalam alfabet, huruf c berada pada posisi ke 3.
Algoritma LETTER_FREQUENCY Algoritma untuk menghitung frekuensi suatu huruf dalam suatu string. ALFABET adalah variabel string yang berisi daftar seluruh huruf. TEXT adalah variabel string yang berisi string yang akan diperiksa. FREKUENSI[1..26] adalah array linier yang menyimpan persentasi banyaknya suatu karakter dalam string input; berjenis real. Variabel TOTAL_HURUF untuk menyimpan banyaknya huruf dalam variabel TEXT. Algoritma ini menggunakan built in function LENGTH(s), SUB(a1,a2,a3) dan MATCH(s,p). 1. [inisialisasi variabel string ] ALFABET = ABCDEFGHIJKLMNOPQRSTUVWXYZ 2. [masukkan string yang akan diperiksa] Read (TEXT) 3. [inisialisasi variabel] TOTAL_HURUF = 0 4. [menghitung panjang string input] PANJANG_TEXT = LENGTH(TEXT) 5. [inisialisasi array FREKUENSI dengan 0] For ( K = 1 ; K <= 26 ; K++) { FREKUENSI[K] = 0

Bab II Struktur Data String : 29

Algoritma dan Pemrograman C++ Lanjut

} [loop untuk memeriksa string input huruf per huruf] For ( K = 1 ; K <= PANJANG_TEXT ; K++ ) { 6.a [mengambil 1 huruf dari string input] HURUF = SUB(TEXT, K, 1) 6.b [mencari posisi HURUF] J = MATCH(ALFABET, HURUF) 6.c [Jika HURUF adalah alfabet] If ( J != 0 ) [increment nilai array FREKUENSI pada indeks J] { FREKUENSI[J] = FREKUENSI[J] + 1 TOTAL_HURUF = TOTAL_HURUF + 1 } } 8. [loop untuk menampilkan isi array FREKUENSI] For ( K = 1 ; K = 26 ; K++ ) { [menghitung persentasi] FREKUENSI[K] = FREKUENSI[K]/TOTAL_HURUF*100 Write(Frekuensi dari huruf ke , K, adalah FREKUENSI[K]) } 9. Halt 6.

2.6.3

Mengubah

nama

lengkap

menjadi

nama

keluarga dengan inisial


Untuk memudahkan, diasumsikan bahwa nama lengkap hanya terdiri dari 3 kata dan nama keluarga terletak pada kata yang ketiga. Sebagai contoh: Edgar Allan Poe Poe, E A

a. Masalah ini mula-mula akan diselesaikan dengan menggunakan built in function sub(a1,a2,a3)
Fungsi EDIT_NAME(NAME) Fungsi untuk mengubah nama lengkap menjadi nama keluarga dengan inisial dengan mengunakan built in function Sub(a1,a2,a3). Variabel NAME, FI, MI, LAST, dan OUTPUT_NAME berjenis string. Variabel lainnya berjenis integer. 1. [menghitung panjang string] K = LENGTH[NAME] 2. [mengambil huruf yang pertama dari kata yang pertama] FI = SUB(NAME, 1, 1) 3. [inisialisasi counter] J =1

Bab II Struktur Data String : 30

Algoritma dan Pemrograman C++ Lanjut

4. [membuat loop untuk mencari spasi yang memisahkan kata pertama dengan kata kedua] While ( SUB(NAME, J, 1) ) { J =J+1 } 5. [mengambil huruf yang pertama dari kata yang kedua] MI = SUB(NAME, J+1, 1) 6. [mengambil kata yang kedua dan ketiga dari NAME] NAME = SUB(NAME, J+1,K) 7. [inisialisasi counter] J = 1 8. [membuat loop untuk mencari spasi yang memisahkan kata kedua dengan kata ketiga] While ( SUB(NAME, J, 1) ) { J = J+1 } 9. [mengambil kata yang ketiga dari NAME] LAST = SUB(NAME, J+1,K) 10. OUTPUT_NAME = CONCAT(LAST, CONCAT(, , CONCAT(FI, CONCAT(, MI)))) 11. Return(DESIRED_NAME)

b. Masalah yang sama akan diselesaikan dengan menggunakan built in function sub(a1,a2,a3) dan match(S,P)
Fungsi EDIT_NAME_rev2(NAME) Fungsi untuk mengubah nama lengkap menjadi nama keluarga dengan inisial dengan mengunakan built ini function sub(a1,a2,a3) dan match(s,p). Variabel NAME, FI, MI, LAST, dan OUTPUT_NAME berjenis string. Variabel lainnya berjenis integer. 1. [menghitung panjang string] K = LENGTH[NAME] 2. [mengambil huruf yang pertama dari kata yang pertama] FI = SUB(NAME, 1, 1) 3. [mencari spasi yang memisahkan kata pertama dengan kata kedua] J = MATCH(NAME, ) 4. [mengambil huruf yang pertama dari kata yang kedua] MI = SUB(NAME, J+1, 1) 5. [mengambil kata yang kedua dan ketiga dari NAME] NAME = SUB(NAME, J+1, K) 6. [mencari spasi yang memisahkan kata kedua dengan kata ketiga] J = MATCH(NAME, ) 7. mengambil kata yang ketiga dari NAME] LAST = SUB(NAME, J+1)

Bab II Struktur Data String : 31

Algoritma dan Pemrograman C++ Lanjut

LATIHAN SOAL BAB 2

8. OUTPUT_NAME CONCAT(LAST, CONCAT(, MI)))) 9. Return(OUTPUT_NAME)

CONCAT(, ,

CONCAT(FI,

1. Tuliskan hasil dari operasi string berikut ini: a. LENGTH(alpha O beta O gamma) b. SUB(harpo O chico O groucho O zeppo, 11, 7) O SUB(harpo O chico O groucho O zeppo, 6, 5) O SUB(harpo O chico O groucho O zeppo, 18, 5) O SUB(harpo O chico O groucho O zeppo, 1, 5) O c. SUB(suffix, LENGTH(suffix) 3, 3) d. MATCH(harpo O chico O groucho O zeppo, po) MATCH(harpo O chico O groucho O zeppo, co) MATCH(harpo O chico O groucho O zeppo, ro) MATCH(harpo O chico O groucho O zeppo, pp) + + + +

2.a. Modifikasikan fungsi EDIT_NAME sehingga mempunyai parameter input nama orang dalam bentuk: EmilieJeanPaulTremblay dan parameter outputnya Tremblay, E.J.P. Jumlah kata dalam nama orang dapat terdiri dari 2 atau lebih kata. Buat pula algoritma utamanya. 2.b. Buat pula programnya dalam bahasa C++. 3.a. Buat fungsi DUPLIKAT(s,n) untuk mengulang string s sebanyak n kali. Sebagai contoh: DUPLIKAT(ha, 3) akan menghasilkan : hahaha. Buat pula algoritma utamanya. 3.b. Buat pula programnya dalam bahasa C++ 4.a. Buat fungsi HAPUS(a, b) untuk menghapus setiap karakter yang ada dalam string a dari string b. Sebagai contoh, string a berisi xz dan string b berisi Txhzexzexxzznxzdx maka hasilnya string b berisi The end. Buat pula algoritma utamanya. 4.b. Buat pula programnya dalam bahasa C++.

Bab II Struktur Data String : 32

Algoritma dan Pemrograman C++ Lanjut

5.a. Buat fungsi HAPUS untuk menghilangkan semua spasi dari string input sehingga hasilnya adalah string yang tanpa spasi. Buat pula algoritma utamanya. 5.b. Buat pula programnya dalam bahasa C++. 6.a. Buat fungsi TENGAH untuk mencetak string input di tengah halaman jika diketahui lebar halaman adalah 120 karakter. Panjang string input < 120 karakter. Buat pula algoritma utamanya. 6.b. Buat pula programnya dalam bahasa C++. 7.a. Buat fungsi TRIM untuk menghapus semua karakter selain huruf alfabet (a..z) dari string input. Hasilnya adalah string yang hanya terdiri dari huruf alfabet. Buat pula algoritma utamanya. 7.b. Buat pula programnya dalam bahasa C++. 8.a. Buat fungsi untuk menghitung banyaknya kata dalam sebuah string. Diasumsikan setiap kata dipisahkan oleh satu atau lebih spasi. 8.b. Buat fungsi untuk menghitung banyaknya huruf dalam sebuah kata. 8.c. Dengan menggunakan fungsi pada 8.a dan 8.b buatlah fungsi untuk menghitung rata-rata banyaknya huruf dari kata-kata yang ada dalam sebuah string. Buat pula algoritma utamanya. 8.d. Buat pula programnya dalam bahasa C++. 9.a. Buat fungsi REVERSE untuk menerima string input dan menghasilkan string output yang isinya adalah kebalikan urutan karakter dalam string input. Sebagai contoh string input = abcd, maka string output = dcba. Buat pula algoritma utamanya. 9.b. Buat pula programnya dalam bahasa C++. 10.a. Palindrome adalah string yang dapat dibaca dari depan maupun dari belakang. Contohnya adalah malam, kodok dan lain-lain. Buatlah fungsi untuk menentukan apakah sebuah string input termasuk palindron atau bukan. Diasumsikan string input berupa huruf kecil semua. Buat pula algoritma utamanya. Bab II Struktur Data String : 33

Algoritma dan Pemrograman C++ Lanjut

10.b. Buat pula programnya dalam bahasa C++.

Bab II Struktur Data String : 34

Anda mungkin juga menyukai