You are on page 1of 19

Algoritma dan Pemrograman C++ Lanjut

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,.
2. 10 angka desimal yaitu 0, 1, 2, ..., 9.

Bab II Struktur Data String : 16

Algoritma dan Pemrograman C++ Lanjut

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.
Tabel 2.1

Kode ASCII (0 - 127)

-------------------------------------------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)
037
045
25
00100101
%
(percent)
038
046
26
00100110
&
(ampersand)
--------------------------------------------Tabel 2.1 (lanjutan)
-------------------------------------------

Bab II Struktur Data String : 17

Algoritma dan Pemrograman C++ Lanjut

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
107
153
6B
01101011
k
108
154
6C
01101100
l
--------------------------------------------Tabel 2.1 (lanjutan)
-------------------------------------------

Bab II Struktur Data String : 18

Algoritma dan Pemrograman C++ Lanjut

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
{
124
174
7C
01111100
|
125
175
7D
01111101
}
126
176
7E
01111110
~
127
177
7F
01111111
DEL

(left opening brace)


(vertical bar)
(right closing brace)
(tilde)
(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
=
31
1F
IUS
63
3F
SUB
95
5F
^
127
7F
"
--------------------------------------------------------------------------------

Tabel 2.2

(lanjutan)

-------------------------------------------------------------------------------Dec
Hex
Code
Dec
Hex
Code
Dec
Hex
Code
Dec
Hex
Code

Bab II Struktur Data String : 19

Algoritma dan Pemrograman C++ Lanjut

-------------------------------------------------------------------------------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
--------------------------------------------------------------------------------

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 lain-lain.
Banyaknya karakter yang dapat direpresentasikan oleh Unicode adalah 65.536 (2 16)
karakter. Sekarang ini aplikasi pengolah kata sudah menggunakan Unicode tetapi
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


Bab II Struktur Data String : 20

Algoritma dan Pemrograman C++ Lanjut

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

26 25 24 23 22 21 20 atau angka desimal = 65


b. Pada sistem pengkodean EBCDIC, karakter A direpresentasikan oleh deretan
bit:
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.

Pernyataan:

A < B menghasilkan nilai true

b.

Pernyataan:

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 \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 (STRCATenation) yang analog
dengan operasi + pada sistem bilangan.
Sebagai contoh :
a.

abc def = abcdef

b.

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.
Sebagai contoh :

Bab II Struktur Data String : 22

Algoritma dan Pemrograman C++ Lanjut

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.

abc = abc

b.

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.
Uji kesamaan untuk sistem string menggunakan operator == dan didefinisikan
sebagai berikut:
Bab II Struktur Data String : 23

Algoritma dan Pemrograman C++ Lanjut

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.

abc == abc

true

b.

abc == abc

false, karena panjang string berbeda

c.

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.

Bill < Billy

true

b.

Science > Science

true

c.

abcd < abce

true

2.4

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

a.

mendeklarasikan string

b.

menghitung panjang string (banyaknya karakter yang menyusun string)

c.

menggabungkan (STRCATenation) 2 buah string menjadi sebuah string

d.

menyalin sebagian string

e.

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
seperti statement untuk mendeklarasikan array 1 dimensi yang berjenis karakter.
Sebagai contoh:

Bab II Struktur Data String : 24

Algoritma dan Pemrograman C++ Lanjut

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 STRLEN(str). Hasil dari fungsi ini adalah bilangan integer.
Sebagai contoh lihat ekspresi berikut ini. Variabel S dan T adalah variabel integer.
a.

S = STRLEN(ComputerScience)

S = 16

b.

T = 2 + 3 + STRLEN(ComputerScience)

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 STRCAT(str1, str2). Hasil dari fungsi ini adalah str1 yang berisi str1 mulamula yang disambung dengan str2. Sebagai contoh lihat ekspresi berikut ini. Variabel
X dan Y adalah variabel string.
a.

X = Mic key Mouse

X = MickeyMouse

Bab II Struktur Data String : 25

Algoritma dan Pemrograman C++ Lanjut

b.

Y = STRCAT(Mic, STRCAT(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.
S = ton

a.

S = SUB(EdmontonAlberta, 6, 3)

b.

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 = STRLEN(a1) maka akan menghasilkan string kosong.
4. Jika a2 + a3 > k + 1, dengan k = STRLEN(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
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.
Bab II Struktur Data String : 26

Algoritma dan Pemrograman C++ Lanjut

A = MATCH(ABCD, ) A = 0 karena dalam string ABCD tidak ada

a.

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.

strcpy(str1, str2): menyalin string str2 ke str1. Biasanya digunakan untuk


memberikan (assign) nilai ke variabel string str1

b.

strcat(str1, str2): menyambungkan string str2 ke str1

c.

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.

strlen(str): menghitung panjang string str, tidak termasuk null terminator.

e.

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
c. Mengubah nama lengkap menjadi nama keluarga dengan inisial.

2.6.1

Memisahkan

nama

menjadi

nama

depan

dan

nama keluarga
Bab II Struktur Data String : 27

Algoritma dan Pemrograman C++ Lanjut

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 Joko Widodo maka
outputnya adalah:
Nama depan anda adalah Joko
Nama keluarga anda adalah Widodo

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]
While (NAMA[i] != \0)
{ NK[j] = NAMA[i]
i++
j++
}
8. [menambahkan karakter null]

Bab II Struktur Data String : 28

Algoritma dan Pemrograman C++ Lanjut

NK[J+1] = \0
[mencetak hasil]
Write (Nama depan anda adalah , ND)
Write (Nama keluarga anda adalah , NK)
10. [selesai]
halt
9.

2.6.2

Menghitung

frekuensi

suatu

huruf

dalam

string
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
STRLEN(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 = STRLEN(TEXT)
5. [inisialisasi array FREKUENSI dengan 0]
For ( K = 1 ; K <= 26 ; K++)
{
FREKUENSI[K] = 0
}
6. [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)

Bab II Struktur Data String : 29

Algoritma dan Pemrograman C++ Lanjut

6.b

[mencari posisi HURUF]


J = MATCH(ALFABET, HURUF)
[Jika HURUF adalah alfabet]
If ( J != 0 )
[increment nilai array FREKUENSI pada indeks J]
{ FREKUENSI[J] = FREKUENSI[J] + 1
TOTAL_HURUF = TOTAL_HURUF + 1
}

6.c

8.

9.

2.6.3

}
[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])
}
Halt

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:
EdgarAllanPoe

Poe,EA

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 = STRLEN[NAME]
2. [mengambil huruf yang pertama dari kata yang pertama]
FI = SUB(NAME, 1, 1)
3. [inisialisasi counter]
J =1
4. [membuat loop untuk mencari spasi yang memisahkan kata
pertama dengan kata kedua]
While ( SUB(NAME, J, 1) )
{ J =J+1
}

Bab II Struktur Data String : 30

Algoritma dan Pemrograman C++ Lanjut

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 = STRCAT(LAST, STRCAT(,, STRCAT(FI,
STRCAT(, 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 = STRLEN[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)
8. OUTPUT_NAME
STRCAT(LAST, STRCAT(,, STRCAT(FI,
STRCAT(, MI))))
9. Return(OUTPUT_NAME)
}

Bab II Struktur Data String : 31

Algoritma dan Pemrograman C++ Lanjut

LATIHAN SOAL BAB 2


1. Tuliskan hasil dari operasi string berikut ini:
a. STRLEN(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, STRLEN(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. Buat fungsi DUPLIKAT(s,n) untuk mengulang string s sebanyak n kali. Sebagai
contoh: DUPLIKAT(ha, 3) akan menghasilkan : hahaha. Buat pula
algoritma utamanya.
2.b. Buat pula programnya dalam bahasa C++
3.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.
3.b. Buat pula programnya dalam bahasa C++.
4.a. Buat fungsi HAPUS untuk menghilangkan semua spasi dari string input
sehingga hasilnya adalah string yang tanpa spasi. Buat pula algoritma utamanya.
4.b. Buat pula programnya dalam bahasa C++.
5.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.
5.b. Buat pula programnya dalam bahasa C++.

Bab II Struktur Data String : 32

Algoritma dan Pemrograman C++ Lanjut

6.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.
6.b. Buat pula programnya dalam bahasa C++.
7.a. Buat fungsi untuk menghitung banyaknya kata dalam sebuah string.
Diasumsikan setiap kata dipisahkan oleh satu atau lebih spasi.
7.b. Buat fungsi untuk menghitung banyaknya huruf dalam sebuah kata.
7.c. Dengan menggunakan fungsi pada 7.a dan 7.b buatlah fungsi untuk menghitung
rata-rata banyaknya huruf dari kata-kata yang ada dalam sebuah string. Buat
pula algoritma utamanya.
7.d. Buat pula programnya dalam bahasa C++.
8.a. Buat fungsi untuk menghitung banyaknya huruf hidup (vokal) dalam sebuah
string.
8.b. Buat fungsi untuk menghitung banyaknya huruf mati (konsonan) dalam sebuah
string.
8.c. Dengan menggunakan fungsi pada 8.a dan 8.b buatlah fungsi untuk menghitung
banyaknya karakter selain huruf yang ada dalam sebuah string. Buat pula
algoritma utamanya.
8.d. Buat pula programnya dalam bahasa C++.
9.a. Buat fungsi REVERSE (iteratif dan rekursif) 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 (rekursif dan
iteratif) untuk menentukan apakah sebuah string input termasuk palindron atau
bukan. Diasumsikan string input berupa huruf kecil semua. Buat pula algoritma
utamanya.
10.b. Buat pula programnya dalam bahasa C++.

Bab II Struktur Data String : 33

Algoritma dan Pemrograman C++ Lanjut

11.

Perbaiki algoritma Pisah Nama di depan sehingga dapat menerima input nama
yang lebih dari dua kata, memisahkannya menjadi nama depan (1 kata), nama
tengah (kosong, 1 kata atau lebih dari 1 kata) dan nama keluarga (1 kata).

Bab II Struktur Data String : 34

You might also like