Bab. 7 Karakter dan String
Tujuan
Instruksional
|
|
·
Dasar karakter dan
string.
·
Pustakan
penanganan-karakter.
·
Fungsi konversi
string.
·
Fungsi pustaka
masukan/keluaran.
·
Fungsi manipulasi-string.
|
·
Fungsi perbandingan
pada pustaka penanganan-string.
·
Fungsi pencarian
pada pustaka penanganan-string.
·
Fungsi memori pada
pustaka penanganan-string.
|
7.1 Introduksi
Pada bab ini, akan dikenalkan
fungsi-fungsi pustakan standar C yang memfasilitasi pemrosesan karakter dan
string. Fungsi tersebut memampukan program untuk memproses karakter, string,
baris teks, dan blok memori. Bab ini juga akan mendiskusikan beberapa teknik
yang dipakai untuk mengembangkan editor, pengolah kata, perangkat penata-letak halaman, dan perangkat
lunak pemrosesan-teks lainnya. Manipulasi teks yang dilakukan oleh
fungsi-fungsi masukan/keluaran terformat seperti printf dan scanf dapat diimplementasikan menggunakan
fungsi-fungsi yang didiskusikan pada bab ini.
7.2 Dasar Karakter dan String
Karakter secara fundamental merupakan
blok pembangun program sumber. Setiap program mengandung rentetan karakter
yang, ketika dikelompokkan sedemikian rupa, diinterpretasikan oleh komputer
sebagai serangkaian perintah yang dipakai dalam menuntaskan pekerjaan. Suatu
program bisa memuat konstanta karakter. Konstanta karakter merupakan sebuah
nilai int yang direpresentasikan sebagai
karakter yang diapit oleh tanda kutip tunggal. Nilai suatu konstanta karakter
adalah nilai integer dari karakter di dalam himpunan karakter mesin. Sebagai
contoh, ‘z’ merepresentasikan nilai integer dari z, dan ‘\n’ adalah nilai
integer dari karakter garis-baru (122 dan 10 di dalam ASCII).
String merupakan suatu runtun karakter
yang diperlakukan sebagai unit tunggal. Sebuah string bisa memuat huruf, dijit,
dan berbagai karakter spesial seperti +, -, *, /, dan $. Literal string atau
konstanta string dalam C ditulis diapit dengan tanda kutip ganda sebagai
berikut:
“Washington
Siahaan” (nama)
“Jl.
Balige No. 1” (alamat jalan)
“Balige,
Tobasa” (kecamatan dan kabupaten)
“(0622) 346322” (nomor telepon)
String dalam C merupakan array karakter
yang diakhiri dengan karakter null (‘\0’). String diakses melalui pointer yang
menunjuk ke karakter pertama di dalam string. Nilai suatu string adalah alamat
dari karakter pertamanya. Jadi, dalam C, sangat tepat bila dikatakan bahwa
string adalah sebuah pointer, yaitu pointer yang menunjuk ke karakter
pertamanya. Pada kasus ini, string seperti array, karena array juga merupakan
sebuah pointer yang menunjuk ke elemen pertamanya.
Array karakter atau variabel bertipe char * dapat diinisialisasi dengan sebuah
string di dalam definisinya. Definisi
char warna[] = "biru";
const char *warnaPtr = " biru ";
masing-masing menginisialisasi sebuah
variabel dengan string “biru”. Definisi
pertama menciptakan sebuah array 5-elemen warna yang memuat karakter ‘b’, ‘i’, ‘r’, ‘u’, dan ‘\0’. Definisi
kedua menciptakan variabel pointer warnaPtr yang menunjuk
ke string “biru” di dalam
memori.
Definisi array tersebut dapat pula
dituliskan sebagai
char warna[] = { 'b', 'i', 'r', 'u', '\0' };
Ketika mendefinisikan suatu array
karakter untuk memuat sebuah string, array tersebut harus cukup besar untuk
menyimpan string dan karakter null sebagai penghenti. Definisi tersebut secara
otomatis menentukan ukuran array berdasarkan jumlah penginisialisasi di dalam
daftar penginsialisasi.
String dapat disimpan di dalam sebuah
array menggunakan scanf. Sebagai
contoh, statemen berikut menyimpan sebuah string di dalam array karakter kata[20]:
scanf( "%s", kata );
String yang dientrikan pengguna
disimpan di dalam kata. Varaibel kata adalah sebuah array, yang tentu saja, sebuah pointer, jadi & tidak dibutuhkan dengan argumen kata. Ingat dari bagian 5.4 bahwa fungsi scanf akan membaca karakter demi karakter sampai ditemukan spasi, tab,
garis-baru, atau indikatir enf-of-file. Jadi, adalah hal yang mungkin bahwa
masukan pengguna akan melebihi 19 karakter dan bahwa program akan bermasalah!
Karena alasan ini, direkomendasikan menggunakan penspesifikasi konversi %19s sehingga scanf hanya membaca sampai 19 karakter saja dan
menyisakan karakter terakhir untuk karakter null penghenti. Ini akan mencegah
scanf dari penulisan karakter ke dalam memori yang melebihi dari s. Bagi suatu array karakter yang akan ditampilkan sebagai
sebuah string, array tersebut harus memuat karakter null penghenti.
7.3 Pustaka Penanganan-Karakter
Pustakan penanganan-karakter (<ctype.h>) menyertakan beberapa fungsi yang
melakukan manipulasi dan pengujian terhadap data karakter. Setiap fungsi
menerima sebuah karakter, yang direpresentasikan sebagai suatu int, atau sebuah EOF. Seperti yang didiskusikan pada Bab 3,
karakter seringkali dimanipulasi sebagai integer, karena karakter di dalam C
biasanya merupakan integer 1-byte. EOF memiliki nilai
-1 dan beberapa arsitek perangkat keras tidak mengijinkan nilai negatif
disimpan di dalam variabel char. Gambar 7.1
menyimpulkan beberapa fungsi pustaka penanganan-karakter.
Prototipe
|
Penjelasan
|
int isdigit( int
c );
int isalpha( int
c );
int isalnum( int
c );
int isxdigit( int
c );
int islower( int
c );
int isupper( int
c );
int tolower( int
c );
int toupper( int
c );
int isspace( int
c );
int iscntrl( int
c );
int ispunct( int
c );
int isprint( int
c );
int isgraph( int
c );
|
Menghasilkan nilai balik true jik c adalah
sebuah dijit dan 0 jika sebaliknya.
Menghasilkan nilai balik true jik c adalah
sebuah huruf dan 0 jika sebaliknya.
Menghasilkan nilai balik true jik c adalah
sebuah dijit atau huruf dan 0 jika
sebaliknya.
Menghasilkan nilai balik true jik c adalah
sebuah dijit heksadesimal dan 0 jika sebaliknya.
Menghasilkan nilai balik true jika c merupakan huruf kecil dan
0 jika sebaliknya.
Menghasilkan nilai balik true jika c merupakan huruf besar dan
0 jika sebaliknya.
Jika c adalah huruf besar, tolower akan
mengembalikan c sebagai huruf kecil. Sebaliknya, tolower membiarkan argumen
tidak berubah.
Jika c adalah huruf kecil, toupper akan
mengembalikan c sebagai huruf besar. Sebaliknya, toupper membiarkan argumen
tidak berubah.
Menghasilkan nilai balik true jika c adalah
karakter spasi, garis-baru (‘\n’), form feed (‘\f’), carriage return (‘\r’),
tab horisontal (‘\t’), atau tab vertikal (‘\v’), dan 0 jika sebaliknya.
Menghasilkan nilai balik true jika c adalah
karakter kontrol dan 0 jika sebaliknya.
Menghasilkan nilai balik true jika c adalah karakter printing
selain spasi, dijit, dan huruf dan menghasilkan 0 jika sebaliknya.
Menghasilkan nilai balik true jika c adalah karakter printing
termasuk spasi dan menghasilkan 0 jika sebaliknya.
Menghasilkan nilai balik true jika c adalah karakter printing
selain spasi dan menghasilkan 0 jika sebaliknya.
|
Fungsi isdigit,
isalpha, isalnum, dan isxdigit
Gambar 7.2 mendemonstrasikan fungsi isdigit, isalpha, isalnum, dan isxdigit. Fungsi isdigit menentukan
apakah argumennya sebuah dijit (0-9). Fungsi isalpha menentukan apakah argumennya merupakan sebuah huruf besar (A-Z) atau
huruf kecil (a-z). Fungsi isalnum menentukan
apakah argumennya sebuah huruf besar, huruf kecil, atau dijit. Fungsi isxdigit menentukan apakah argumennya adalah
dijit heksadesimal (A-F, a-f, 0-9).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
/* Gambar 7.2: gambar07_02.c
Menggunakan fungsi isdigit, isalpha, isalnum, dan isxdigit */
#include <stdio.h>
#include <ctype.h>
int main( void )
{
printf( "%s\n%s%s\n%s%s\n\n", "Sesuai dengan
isdigit: ",
isdigit( '8' )? "8 adalah sebuah " : "8 bukan
sebuah ", "dijit",
isdigit( '#' )? "# adalah sebuah " : "# bukan
sebuah ", "dijit" );
printf(
"%s\n%s%s\n%s%s\n%s%s\n%s%s\n\n",
"Sesuai dengan isalpha:",
isalpha( 'A' )? "A adalah sebuah " : "A bukan
sebuah ", "huruf",
isalpha( 'b' )? "b adalah sebuah " : "b bukan
sebuah ", "huruf",
isalpha( '&' )? "& adalah sebuah " :
"& bukan sebuah ", "huruf",
isalpha( '4' )? "4 adalah
sebuah " : "4 bukan sebuah ", "huruf" );
printf(
"%s\n%s%s\n%s%s\n%s%s\n\n",
"Sesuai dengan isalnum:",
isalnum( 'A' )? "A adalah sebuah " : "A bukan sebuah ",
"dijit
atau huruf",
isalnum( '8' )? "8 adalah sebuah " : "8 bukan sebuah ",
"dijit
atau huruf",
isalnum( '#' )? "# adalah sebuah " : "# bukan sebuah ",
"dijit
atau huruf" );
printf(
"%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s\n",
"Sesuai
dengan isxdigit:",
isxdigit( 'F' )? "F adalah sebuah " : "F
bukan sebuah ",
"dijit heksadesimal",
isxdigit( 'J' )? "J adalah sebuah " : "J
bukan sebuah ",
"dijit heksadesimal",
isxdigit( '7' )? "7 adalah sebuah " : "7
bukan sebuah ",
"dijit heksadesimal",
isxdigit( '$' )? "$ adalah sebuah " : "$
bukan sebuah ",
"dijit heksadesimal",
isxdigit( 'f' )? "f adalah sebuah " : "f
bukan sebuah ",
"dijit heksadesimal" );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Sesuai dengan isdigit:
8 adalah sebuah dijit
# bukan sebuah dijit
Sesuai dengan isalpha:
A adalah sebuah huruf
b adalah sebuah huruf
& bukan sebuah huruf
4 bukan sebuah huruf
Sesuai dengan isalnum:
A adalah sebuah dijit atau huruf
8 adalah sebuah dijit atau huruf
# bukan sebuah dijit atau huruf
Sesuai dengan isxdigit:
F adalah sebuah dijit heksadesimal
J bukan sebuah dijit heksadesimal
7 adalah sebuah dijit heksadesimal
$ bukan sebuah dijit heksadesimal
f adalah sebuah dijit heksadesimal
Gambar 7.1 | Penggunaan
fungsi isdigit, isalpha, isalnum, dan isxdigit.
Gambar 7.2 menggunakan operator
kondisional (?:) untuk
menentukan apakah string “adalah sebuah” atau string “bukan sebuah” ditampilkan pada keluaran untuk tiap
karakter yang diuji. Sebagai contoh, ekspresi
isdigit( '8' ) ? "8 adalah sebuah " : "8 bukan sebuah "
mengindikasikan bahwa jika ‘8’ adalah
sebuah dijit, maka string “8 adalah sebuah “ yang ditampilkan, dan jika ‘8’ tidak sebuah dijit (isdigit menghasilkan
nilai balik 0), maka string “8 bukan sebuah “ yang ditampilkan.
Fungsi islower,
isupper, tolower, dan toupper
Gambar 7.3 mendemonstrasikan fungsi islower, isupper, tolower, dan toupper. Fungsi islower menentukan
apakah argumennya merupakah huruf kecil (a-z). Fungsi isupper menentukan apakah argumennya merupakan
huruf besar (A-Z). Fungsi tolower mengkonversi
huruf besar menjadi huruf kecil dan menghasilkan nilai balik berupa huruf
kecil. Jika argumen tidak huruf besar, maka tolower menghasilkan nilai balik berupa argumen yang tidak berubah. Fungsi toupper mengkonversi huruf kecil menjadi huruf
besar dan menghasilkan nilai balik berupa huruf besar. Jika argumen tidak huruf
kecil, maka toupper menghasilkan
nilai balik berupa argumen yang tidak berubah.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/* Gambar 7.3: gambar07_03.c
Menggunakan fungsi islower, isupper, tolower, toupper */
#include <stdio.h>
#include <ctype.h>
int main( void )
{
printf( "%s\n%s%s\n%s%s\n%s%s\n%s%s\n\n",
"Sesuai dengan islower:",
islower( 'p' )? "p
adalah sebuah " : "p bukan sebuah ",
"huruf kecil",
islower( 'P' )? "P
adalah sebuah " : "P bukan sebuah ",
"huruf kecil",
islower( '5' )? "5
adalah sebuah " : "5 bukan sebuah ",
"huruf kecil",
islower( '!' )? "!
adalah sebuah " : "! bukan sebuah ",
"huruf kecil" );
printf( "%s\n%s%s\n%s%s\n%s%s\n%s%s\n\n",
"Sesuai dengan isupper:",
isupper( 'D' )? "D
adalah sebuah " : "D bukan sebuah ",
"huruf besar",
isupper( 'd' )? "d
adalah sebuah " : "d bukan sebuah ",
"huruf besar",
isupper( '8' )? "8
adalah sebuah " : "8 bukan sebuah ",
"huruf besar",
isupper( '$' )? "$
adalah sebuah " : "$ bukan sebuah ",
"huruf besar" );
printf( "%s%c\n%s%c\n%s%c\n%s%c\n",
"u dikonversi menjadi huruf besar adalah ", toupper( 'u' ),
"7 dikonversi menjadi huruf besar adalah ", toupper( '7' ),
"$ dikonversi menjadi hutuf besar adalah ", toupper( '$' ),
"L dikonversi menjadi huruf kecil adalah ", tolower( 'L' ));
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Sesuai dengan islower:
p adalah sebuah huruf kecil
P bukan sebuah huruf kecil
5 bukan sebuah huruf kecil
! bukan sebuah huruf kecil
Sesuai dengan isupper:
D adalah sebuah huruf besar
d bukan sebuah huruf besar
8 bukan sebuah huruf besar
$ bukan sebuah huruf besar
u dikonversi menjadi huruf besar
adalah U
7 dikonversi menjadi huruf besar
adalah 7
$ dikonversi menjadi hutuf besar
adalah $
L dikonversi menjadi huruf kecil
adalah l
Gambar 7.3 | Penggunaan
fungsi fungsi islower, isupper, tolower, dan toupper
Fungsi isspace,
iscntrl, ispunct, isprint, dan isgraph
Gamba 7.4 mendemonstrasikan fungsi isspace, iscntrl, ispunct, isprint, dan isgraph. Fungsi isspace menentukan jika sebuah karakter adalah
salah satu dari karakter spasi-putih: spasi (‘ ‘), form feed (‘\f’), garis-baru (‘\n’), carriage return (‘\r’), tab horisontal (‘\t’), tab vertikal (‘\v’).
Fungsi iscntrl menentukan jika sebuah karakter adalah
salah satu dari karakter kontrol: tab horisontal (‘\t’), tab vertikal (‘\v’), form feed (‘\f’), alert (‘\a’), backspace
(‘\b’), carriage return (‘\r’), atau
garis-baru (‘\r’). Fungsi ispunct menentukan jika
sebuah karakter adalah suatu karakter printing
selain spasi, dijit, atau huruf, seperti
$, #, (, ), [, ], {, }, :, atau %. Fungsi isprint menentukan apakah sebuah karakter dapat ditampilkan pada layar (termasuk
karakter spasi). Fungsi isgraph sama seperti isprint, kecuali bahwa karakter spasi tidak
disertakan.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
/* Gambar 7.4: gambar07_04.c
Menggunakan fungsi isspace, iscntrl, ispunct, isprint, isgraph */
#include <stdio.h>
#include <ctype.h>
int main( void )
{
printf( "%s\n%s%s%s\n%s%s%s\n%s%s\n\n",
"Sesuai dengan isspace:",
"Garis-baru", isspace( '\n' )? " adalah sebuah
" : " bukan sebuah ",
"karakter spasi-putih", "Tab horisontal",
isspace( '\t' )? " adalah sebuah " : " bukan
sebuah ",
"karakter spasi-putih",
isspace( '%' )? "% adalah sebuah " : "% bukan
sebuah ",
"karakter spasi-putih" );
printf( "%s\n%s%s%s\n%s%s\n\n", "Sesuai dengan
iscntrl:",
"Garis-baru", iscntrl( '\n' )? " adalah
sebuah " : " bukan sebuah ",
"karakter kontrol", iscntrl( '$' )? "$ adalah
sebuah " :
"$ bukan sebuah ", "karakter kontrol"
);
printf( "%s\n%s%s\n%s%s\n%s%s\n\n",
"Sesuai dengan ispunct:",
ispunct( ';' )? "; adalah sebuah " : "; bukan
sebuah ",
"karakter pungtuasi",
ispunct( 'Y' )? "Y adalah sebuah " : "Y bukan
sebuah ",
"karakter pungtuasi",
ispunct( '#' )? "# adalah sebuah " : "# bukan
sebuah ",
"karakter pungtuasi" );
printf( "%s\n%s%s\n%s%s%s\n\n", "Sesuai dengan
isprint:",
isprint( '$' )? "$ adalah sebuah " : "$ bukan
sebuah ",
"karakter printing",
"Alert", isprint( '\a' )? " adalah sebuah
" : " bukan sebuah ",
"karakter printing" );
printf( "%s\n%s%s\n%s%s%s\n", "Sesuai dengan
isgraph:",
isgraph( 'Q' )? "Q adalah sebuah " : "Q bukan
sebuah ",
"karakter printing selain spasi",
"Spasi", isgraph( ' ' )? " adalah sebuah
" : " bukan sebuah ",
"karakter printing selain spasi" );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Sesuai dengan isspace:
Garis-baru adalah sebuah karakter
spasi-putih
Tab horisontal adalah sebuah karakter
spasi-putih
% bukan sebuah karakter spasi-putih
Sesuai dengan iscntrl:
Garis-baru adalah sebuah karakter
kontrol
$ bukan sebuah karakter kontrol
Sesuai dengan ispunct:
; adalah sebuah karakter pungtuasi
Y bukan sebuah karakter pungtuasi
# adalah sebuah karakter pungtuasi
Sesuai dengan isprint:
$ adalah sebuah karakter printing
Alert bukan sebuah karakter printing
Sesuai dengan isgraph:
Q adalah sebuah karakter printing
selain spasi
Spasi bukan sebuah karakter printing selain
spasi
Gambar 7.4 | Penggunaan
fungsi isspace, iscntrl, ispunct,
isprint, dan isgraph
7.4 Fungsi Konversi String
Bagian ini akan menyajikan
fungsi-fungsi konversi-string dari pustaka utilitas umum (<stdlib>). Semua fungsi ini mengkonversi string
dijit ke integer dan ke nilai pecahan. Gambar 7.5 menyimpulkan semua fungsi
konversi-string. Perhatikan bahwa kegunaan const dalam mendeklarasikan variabel nPtr di dalam header fungsi (dibaca dari kanan ke kiri sebagai “nPtr merupakan sebuah pointer yang menunjuk ke suatu konstanta
karakter”); const menspesifikasi
bahwa nilai argumen tidak akan dimodifikasi.
Prototipe
|
Penjelasan
|
double atof( const
char *nPtr );
int atoi( const
char *nPtr );
long atol( const
char *nPtr );
double strtod( const
char *nPtr, char
**endPtr );
long strtol( const
char *nPtr, char
**endPtr, int base );
unsigned long strtoul( const
char *nPtr, char
**endPtr, int base );
|
Mengkonversi dari string nPtr menjadi double.
Mengkonversi dari string nPtr menjadi int.
Mengkonversi dari string nPtr menjadi long
int.
Mengkonversi dari string nPtr menjadi double.
Mengkonversi dari string nPtr menjadi long.
Mengkonversi dari string nPtr menjadi unsigned
long.
|
Gambar 7.5 | Fungsi konversi-string dari pustaka
utilitas umum.
Fungsi atof
Fungsi atof (Gambar 7.6) mengkonversi argumennya, sebuah string yang
merepresentasikan suatu angka titik-mengambang (pecahan), menjadi suatu nilai double. Fungsi ini menghasilkan nilai balik
berupa nilai double. Jika nilai
terkonversi tidak dapat direpresentasikan, misalnya, karena karakter pertama
dari string adalah sebuah huruf, maka watak fungsi atof menjadi tak-terdefinisi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/* Gambar 7.6: gambar07_06.c
Menggunakan atof */
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
double
d; /* Variabel untuk menampung string terkonversi */
d = atof( "99.0" );
printf( "%s%.3f\n%s%.3f\n",
"String \"99.0\" dikonversi menjadi double
adalah ", d,
"Nilai terkonversi dibagi dengan 2 menjadi ", d / 2.0
);
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
String "99.0" dikonversi
menjadi double adalah 99.000
Nilai terkonversi dibagi dengan 2
menjadi 49.500
Gambar 7.6 | Penggunaan
fungsi atof
Fungsi atoi
Fungsi atoi (Gambar 7.7) mengkonversi argumennya, sebuah string dijit yang
merepresentasikan suatu angka integer, menjadi suatu nilai int. Fungsi ini menghasilkan nilai balik berupa nilai int. Jika nilai terkonversi tidak dapat direpresentasikan,
misalnya, karena karakter pertama dari string adalah sebuah huruf, maka watak
fungsi atoi menjadi tak-terdefinisi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/* Gambar 7.7: gambar07_07.c
Menggunakan atoi */
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
int
i; /* variabel untuk menampung string terkonversi */
i = atoi( "2593"
);
printf( "%s%d\n%s%d\n",
"String \"2593\" dikonversi
menjadi int adalah ", i,
"Nilai terkonversi dikurangi dengan
593 menjadi ", i - 593 );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
String "99.0" dikonversi
menjadi double adalah 99.000
Nilai terkonversi dibagi dengan 2
menjadi 49.500
Gambar 7.7 | Penggunaan
fungsi atoi
Fungsi atol
Fungsi atol (Gambar 7.8) mengkonversi argumennya, sebuah string dijit yang
merepresentasikan suatu angka integer yang panjang, menjadi suatu nilai long. Fungsi ini menghasilkan nilai balik berupa nilai long. Jika nilai terkonversi tidak dapat direpresentasikan,
misalnya, karena karakter pertama dari string adalah sebuah huruf, maka watak
fungsi atol menjadi tak-terdefinisi. Jika int dan long keduanya
disimpan dalam 4-byte, maka fungsi atoi dan atol akan menghasilkan keluaran yang identik.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/* Gambar 7.8: gambar07_08.c
Menggunakan atol */
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
long
l; /* variabel untuk menampung string terkonversi */
l = atol( "1000000"
);
printf( "%s%ld\n%s%ld\n",
"String \"1000000\" dikonversi menjadi long
int adalah ", l,
"Nilai terkonversi dibagi dengan 2 menjadi ", l / 2
);
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
String "1000000" dikonversi
menjadi long int adalah 1000000
Nilai terkonversi dibagi dengan 2
menjadi 500000
Gambar 7.8 | Penggunaan
fungsi atol
Fungsi strtod
Fungsi strtod (Gambar 7.0) mengkonversi runtun karakter yang merepresentasikan nilai
pecahan menjadi double. Fungsi ini
menerima dua argumen, yaitu sebuah string (char *) dan sebuah pointer yang menunjuk ke string (char **). String tersebut memuat runtun karakter yang akan dikonversi menjadi double. Pointer ditugaskan kepada lokasi dari
karakter pertama setelah potongan terkonversi dari string. Baris 14
d = strtod( string, &stringPtr );
mengindikasikan bahwa d ditugaskan kepada nilai double yang dikonversi dari string, dan stringPtr ditugaskan ke lokasi dari karakter
pertama setelah nilai terkonversi (51.2) di dalam string.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/* Gambar 7.9: gambar07_09.c
Menggunakan strtod */
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
/*
menginisialisasi pointer strin */
const
char *string = "51.2% diperbolehkan"; /*
menginisialisasi string */
double
d; /* variabel untuk menampung runtun terkonversi */
char
*stringPtr; /* menciptakan pointer char */
d =
strtod( string, &stringPtr );
printf( "String \"%s\" dikonversi menjadi
\n", string );
printf( "nilai double %.2f dan string
\"%s\"\n", d, stringPtr );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
String "51.2% diperbolehkan"
dikonversi menjadi
nilai double 51.20 dan string "%
diperbolehkan"
Gambar 7.9 | Penggunaan
fungsi strtod
Fungsi strtol
Fungsi strtol (Gambar 7.10) mengkonversi runtun karakter yang merepresentasikan nilai
integer menjadi long. Fungsi ini
menerima tiga argumen, yaitu sebuah string (char *), sebuah pointer yang menunjuk ke string (char **), dan sebuah integer. String tersebut memuat runtun karakter yang akan
dikonversi menjadi long. Pointer
ditugaskan kepada lokasi dari karakter pertama setelah potongan terkonversi
dari string. Integer menspesifikasi nilai basis yang dipakai untuk konversi.
Baris 13
x = strtol( string, &sisaPtr, 0 );
mengindikasikan bahwa x ditugasi nilai long yang dikonversi
dari string. Argumen kedua, sisaPtr, ditugasi sisa dari string setelah konversi. Penggunaan NULL
untuk argumen kedua menyebabkan sisa string diabaikan. Argumen ketiga, 0,
mengindikasikan bahwa nilai yang akan dikonversi bisa dari berbasis oktal
(basis 8), desimal (basis 10), atau heksadesimal (basis 16). Basis dapat dispesifikasi
sebagai 0 atau sembarang nilai antara 2 dan 36. Sebagai contoh, nilai-nilai
heksadesimal dapat memuat dijit 0-9 dan karakter A-F. Sebuah integer basis 11
dapat memuat dijit 0-9 dan karakter A. Integer basis 24 dapat memuat dijit 0-9
dan karakter A-N. Sebuah integer basis 36 dapat memuat dijit 0-9 dan karakter
A-Z.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/* Gambar 7.10: gambar07_10.c
Menggunakan strtol */
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
const
char *string = "-1234567abc"; /* menginisialisasi string pointer */
char
*sisaPtr; /* menciptakan pointer char */
long
x; /* variabel untuk menampung runtun terkonversi */
x =
strtol( string, &sisaPtr, 0 );
printf( "%s\"%s\"\n%s%ld\n%s\"%s\"\n%s%ld\n",
"String asli adalah ", string,
"Nilai terkonversi adalah ", x,
"Sisa dari string asli adalah ",
sisaPtr,
"Nilai terkonversi dijumlahkan dengan 567 menjadi ",
x + 567 );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
String asli adalah
"-1234567abc"
Nilai terkonversi adalah -1234567
Sisa dari string asli adalah
"abc"
Nilai terkonversi dijumlahkan dengan
567 menjadi -1234000
Gambar 7.10 | Penggunaan
fungsi strtol
Fungsi strtoul
Fungsi strtoul (Gambar 7.11) mengkonversi runtun karakter yang merepresentasikan sebuah
integer unsigned long menjadi nilai unsigned long. Fungsi ini bekerja identik dengan
fungsi strtol. Statemen
x = strtoul( string, &sisaPtr, 0 );
pada Gambar 7.11 mengindikasikan bahwa x ditugasi nilai unsigned long yang dikonversi
dari string. Argumen kedua, &sisaPtr, ditugasi sisa string setelah konversi. Argumen ketiga, 0,
mengindikasikan bahwa nilai yang akan dikonversi dapat dalam format oktal,
desimal, atau heksadesimal.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/* Gambar 7.11: gambar07_11.c
Menggunakan strtoul */
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
const
char *string = "1234567abc"; /* menginisialisasi
pointer string */
unsigned
long x; /* variabel untuk menampung runtun terkonversi */
char
*sisaPtr; /* menciptakan pointer char */
x =
strtoul( string, &sisaPtr, 0 );
printf(
"%s\"%s\"\n%s%lu\n%s\"%s\"\n%s%lu\n",
"String asli adalah ", string,
"Nilai terkonversi adalah ", x,
"Sisa dari string asli adalah ",
sisaPtr,
"Nilai terkonversi dikurangi 567 menjadi ", x - 567
);
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
String asli adalah
"1234567abc"
Nilai terkonversi adalah 1234567
Sisa dari string asli adalah
"abc"
Nilai terkonversi dikurangi 567
menjadi 1234000
Gambar 7.11 | Penggunaan
fungsi strtoul
7.5 Fungsi Pustaka Masukan/Keluaran
Standar
Bagian ini akan menyajikan beberapa
fungsi dari pustaka masukan/keluaran standar (<stdio.h>) khusunya untuk memanipulasi karakter dan string. Gambar
7.12 menyimpulkan beberapa fungsi masukan/keluaran string dan karakter dari
pustaka masukan/keluaran standar.
Prototipe
|
Penjelasan
|
int getchar( void
);
char *fgets( char
*s, int n, FILE *stream);
int putchar( int
c );
int puts( const
char *s );
int sprintf( char
*s, const char *format, ... );
int sscanf( char
*s, const char *format, ... );
|
Memasukkan karakter berikutnya dari masukan
standar dan menghasilkan nilai balik berupa sebuah integer.
Memasukkan karakter-karakter dari aliran
tertentu ke dalam array s sampai dijumpai karakter garis-baru atau
enf-of-file atau sampai n-1 byte selesai terbaca.
Menampilkan karakter yang disimpan di dalam
c dan mengembalikannya sebagai sebuah integer.
Menampilkan string s yang diikuti dengan sebuah karakter garis-baru.
Menghasilkan nilai balik berupa integer tak-nol jika berhasil, atau EOF jika
terjadi kegagalan.
Ekivalen dengan printf, kecuali
bahwa keluaran disimpan di dalam array s, bukan ditampilkan
pada layar. Menghasilkan nilai balik berupa jumlah karakter yang dituliskan
ke dalam s, atau EOF jika terjadi error.
Akivalen dengan scanf, kecuali
bahwa masukan dibaca dari array s, bukan dari papan-ketik. Menghasilkan
nilai balik berupa jumlah item yang sukses terbaca oleh fungsi, atau EOF jika
terjadi error.
|
Gambar 7.12 | Fungsi karakter dan string dari
pustaka masukan/keluaran standar
Fungsi fgets dan
putchar
Gambar 7.13 menggunakan fungsi fgets dan putchar untuk membaca
sebaris teks dari masukan standar (papan-ketik) dan secara rekursif menampilkan
karakter-karakter pada basis dengan urutan terbalik. Fungsi fgets membaca karakter demi karakter dari masukan standar ke
dalam argumen pertamanya, sebuah array char, sampai ditemukan karakter garis-baru atau indikator end-of-file atau sampai jumlah karakter maksimum terlah terbaca.
Jumlah karakter maksimum adalah lebih sedikit satu dari nilai yang ditentukan
di dalam argumen kedua dari fungsi fgets. Argumen ketiga
menspesifikasi aliran dari mana karakter dibaca, pada kasus ini, digunakan
aliran masukan standar (stdin). Karakter null
(‘\0’) disambungkan ke dalam array char (argumen
pertama). Fungsi putchar menampilkan
argumen karakternya. Program memanggil fungsi rekursif balik untuk menampilkan sebaris teks dengan gaya mundur. Jika
karakter pertama dari array yang diterima oleh balik adalah karakter null ‘\0’,
maka fungsi balik akan memberikan
nilai balik. Sebaliknya, balik dipanggil
kembali dengan alamat subarray dimulai dari elemen s[1], dan karakter s[0] ditampilkan
dengan putchar ketika pemanggilan rekursif selesai
dilakukan.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
/* Gambar 7.13: gambar07_13.c
Menggunakan fungsi gets dan putchar */
#include <stdio.h>
void balik( const char * const sPtr );
/* prototipe */
int main( void )
{
char
kalimat[ 80 ]; /* menciptakan array char */
printf( "Masukkan sebaris teks:\n" );
/*
menggunakan fgets untuk membaca sebaris teks */
fgets( kalimat, 80, stdin );
printf( "\nBaris teks ditampilkan terbalik adalah:\n"
);
balik( kalimat );
return
0; /* indikasi terminasi sukses */
} /*
akhir main */
/* menampilkan karakter secara rekursif
dengan urutan terbalik */
void balik( const char * const sPtr )
{
/*
jika akhir dari string */
if
( sPtr[ 0 ] == '\0' ) { /* kasus basis */
return;
} /*
akhir if */
else
{ /* jika tidak akhir string */
balik( &sPtr[ 1 ] ); /* langkah rekursif */
putchar( sPtr[ 0 ] ); /* menggunakan
putchar untuk menampilkan karakter */
} /*
akhir else */
} /* akhir fungsi balik */
|
Masukkan sebaris teks:
Teknik Elektro Universitas Gadjah Mada
Baris teks ditampilkan terbalik
adalah:
adaM hajdaG satisrevinU ortkelE kinkeT
Masukkan sebaris teks:
Teknik Elektro UNRAM
Baris teks ditampilkan terbalik
adalah:
MARNU ortkelE kinkeT
Gambar 7.13 | Penggunaan
fungsi gets dan putchar
Fungsi getchar
dan puts
Gambar 7.14 menggunakan fungsi getchar dan puts dalam membaca karakter demi karakter dari masukan standar ke dalam array
karakter kalimat dan menampilkan array karakter
tersebut sebagai sebuah string. Fungsi getchar membaca sebuah karakter dari masukan standar dan menghasilkan nilai balik
berupa integer (dari karakter tersebut). Fungsi puts mengambil sebuah string (char *) sebagai
argumen dan menampilkan string tersebut diikuti dengan karakter garis-baru.
Program berhenti membaca karakter ketika getchar membaca karakter garis-baru yang dimasukkan pengguna untuk mengakhiri
baris teks. Karakter null disambungkan ke dalam array kalimat (baris 19) sehingga array tersebut
diperlakukan sebagai sebuah string. Kemudian, fungsi puts menampilkan string yang dimuat di dalam kalimat.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/* Gambar 7.14: gambar07_14.c
Menggunakan fungsi getchar dan puts */
#include <stdio.h>
int main( void )
{
char
c; /* variabel untuk menampung karakter yang dimasukkan pengguna */
char
kalimat[ 80 ]; /* menciptakan array char */
int
i = 0; /* menginisialisasi kounter i */
/*
mendesak pengguna memasukkan sebaris teks */
puts( "Masukkan
sebaris teks:" );
/*
menggunakan getchar untuk membaca setiap karakter */
while
( ( c = getchar() ) != '\n') {
kalimat[ i++ ] = c;
} /*
akhir while */
kalimat[ i ] = '\0'; /* menghentikan string */
/*
menggunakan puts untuk menampilkan kalimat */
puts( "\nBaris teks
yang dimasukkan adalah:" );
puts( kalimat );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Masukkan sebaris teks:
Pematang Siantar
Baris teks yang dimasukkan adalah:
Pematang Siantar
Gambar 7.14 | Menggunakan getchar dan puts
Fungsi sprintf
Gambar 7.15 menggunakan fungsi sprintf dalam menampilkan data terformat ke
dalam array s (array
karakter). Fungsi ini menggunakan penspesifikasi konversi yang sama seperti printf. Program membaca sebuah nilai int dan nilai double untuk diformat
dan ditampilkan ke dalam array s. Array s adalah argumen pertama dari sprintf.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/* Gambar 7.15: gambar07_15.c
Menggunakan sprintf */
#include <stdio.h>
int main( void )
{
char
s[ 80 ]; /* menciptakan array char */
int
x; /* nilai x yang akan dibaca */
double
y; /* nilai y yang akan dibaca */
printf( "Masukkan sebuah integer dan sebuah double:\n"
);
scanf( "%d%lf", &x, &y );
sprintf( s, "integer:%6d\ndouble:%8.2f", x, y
);
printf( "%s\n%s\n",
"Keluaran terformat disimpan di dalam array s adalah:", s );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Masukkan sebuah integer dan sebuah
double:
23 45.76
Keluaran terformat disimpan di dalam
array s adalah:
integer: 23
double: 45.76
Gambar 7.15 | Menggunakan sprintf
Fungsi sscanf
Gambar 7.16 menggunakan fungsi sscanf dalam membaca data terformat dari
karakter array s. Fungsi ini
menggunakan penspesifikasi konversi yang sama dengan scanf. Program membaca sebuah int dan sebuah double dari array s dan menyimpannya di dalam x dan y. Nilai dari x dan y kemudian
ditampilkan. Array s adalah argumen
pertama dari sscanf.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/* Gambar 17.16: gambar07_16.c
Menggunakan sscanf */
#include <stdio.h>
int main( void )
{
char
s[] = "31298 87.375"; /* menginisialisasi array s */
int x; /* nilai x yang akan dibaca */
double y; /* nilai yang akan dibaca
*/
sscanf( s, "%d%lf", &x, &y );
printf( "%s\n%s%6d\n%s%8.3f\n",
"Nilai-nilai yang disimpan di dalam array karakter s adalah:",
"integer:", x, "double:", y );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Nilai-nilai yang disimpan di dalam
array karakter s adalah:
integer: 31298
double: 87.375
Gambar 7.16 | Menggunakan sscanf
7.6 Fungsi Pemanipulasi String dari
Pustaka Penanganan-String
Pustakan penanganan-string (<string.h>) menyediakan banyak fungsi yang
berguna dalam memanipulasi data string (menyalin string dan menyambung string),
membandingkan string, mencari karakter dan substring di dalam string,
mentokenkan string (memisahkan string menjadi potongan-potongan logis), dan
menentukan panjang string. Bagian ini akan menyajikan fungsi-fungsi
pemanipulasian string dari pustaka penanganan-string. Semua fungsi tersebut
disimpulkan pada Gambar 7.17. Setiap fungsi, kecuali strncpy, menempelkan karakter null ke dalam
hasilnya.
Prototipe
|
Penjelasan
|
char *strcpy( char
*s1, const char *s2 )
char *strncpy( char
*s1, const char *s2, size_t n )
char *strcat( char
*s1, const char *s2 )
char *strncat( char
*s1, const char *s2, size_t n )
|
Menyalin string s2 ke dalam
array s1. Nilai dari s1 dijadikan
nilai balik.
Menyalin paling banyak n buah karakter dari string s2 ke dalam
array s1. Nilai dari s1 dijadikan
nilai balik.
Menyambung atau menempelkan string s2 ke dalam array s1. Karakter
pertama dari s2 menindih karakter null penghenti dari s1. Nilai dari s1 dijadikan
nilai balik.
Menyambung sebanyak n karakter dari string s2 ke dalam array s1. Karakter
pertama dari s2 menindih karakter null penghenti dari s1. Nilai dari s1 dijadikan
nilai balik.
|
Gambar 7.17 | Semua fungsi pemanipulasi string
dari pustaka penanganan-string
Fungsi strncpy dan strncat menspesifikasi sebuah parameter
bertipe size_t, yang merupakan tipe yang
didefinisikan oleh standar C sebagai tipe integral dari nilai yang dijadikan nilai
balik oleh operator sizeof.
Fungsi strcpy menyalin argumen keduanya (sebuah string) ke dalam argumen pertamanya
(sebuah array karakter yang harus cukup besar untuk menampung string dan
karakter null penghenti, yang juga disalin). Fungsi strncpy ekivalen dengan strcpy, kecuali bahwa strncpy menspesifikasi jumlah karakter yang
akan disalin dari string ke dalam array. Fungsi strncpy tidak harus menyalin karakter null penghenti dari argumen keduanya.
Karakter null penghenti hanya disalin jika jumlah karakter yang akan disalin
sedikitnya satu lebih panjang dari panjang string. Misalnya, jika “test” adalah
argumen kedua, maka karakter null penghenti akan disalin hanya jika argumen
ketiga pada fungsi strncpy sedikitnya
bernilai 5 (empat karakter untuk “test” ditambah dengan karakter null
penghenti). Jika argumen ketiga lebih besar dari 5, maka karakter null akan
ditempelkan ke dalam array sampai total jumlah karakter yang dispesifikasi oleh
argumen ketiga ditulis.
Fungsi strcpy
dan strncpy
Gambar 7.18 menggunakan strcpy untuk menyalin keseluruhan string di
dalam array x ke dalam array y dan menggunakan strncpy untuk menyalin
14 karakter pertama array x ke dalam array z.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/* Gambar 17.18: gambar07_18.c
Menggunakan strcpy dan strncpy */
#include <stdio.h>
#include <string.h>
int main( void )
{
char
x[] = "Selamat Ulang Tahun Untukmu"; /* menginisialisasi array char x*/
char
y[ 25 ]; /* menciptakan array char y */
char
z[ 15 ]; /* menciptakan array char z */
/*
menyalin dari x ke y */
printf( "%s%s\n%s%s\n",
"String di dalam array x adalah: ", x,
"String di dalam array y adalah: ", strcpy( y, x ) );
/*
menyalin 14 karakter pertama dari x ke z.
Tidak menyalin karakter null */
strncpy( z, x, 14 );
z[
14 ] = '\0'; /* menghentikan string di dalam z */
printf( "String di dalam array z adalah: %s\n", z );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
String di dalam array x adalah:
Selamat Ulang Tahun Untukmu
String di dalam array y adalah:
Selamat Ulang Tahun Untukmu
String di dalam array z adalah:
Selamat Ulang
Gambar 7.18 | Menggunakan strcpy dan strncpy
Fungsi strcat
dan strncat
Fungsi strcat menyambungkan argumen keduanya (sebuah string) ke dalam argumen
pertamanya (sebuah array karakter yang memuat string). Karakter pertama dari
argumen kedua menggantikan karakter null (‘\0’) yang menghentikan string di
dalam argumen pertama. Anda harus memastikan bahwa array yang digunakan untuk
menyimpan string pertama harus cukup besar dalam menyimpan string pertama, string kedua, dan karakter null penghenti
yang disalin dari string kedua. Fungsi strncat menyambungkan sejumlah karakter dari string kedua ke dalam string
pertama. Karakter null penghenti secara otomatis ditempelkan ke dalam hasil.
Gambar 7.19 mendemonstrasikan fungsi strcat dan strncat.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/* Gambar 7.19: gambar07_19.c
Menggunakan strcat dan strncat */
#include <stdio.h>
#include <string.h>
int main( void )
{
char
s1[ 20 ] = "Selamat "; /* menginisialisasi array char s1 */
char
s2[] = "Ulang Tahun "; /* menginisialisasi array char s2 */
char
s3[ 40 ] = " "; /* menginisialisasi array char s3 */
printf( "s1 = %s\ns2 = %s\n", s1, s2 );
/*
menyambungkan s2 ke dalam s1 */
printf( "strcat( s1, s2 ) = %s\n", strcat( s1, s2 ));
/* menyambungkan 16 karakter pertama dari s1 ke dalam
s3. Menempatkan '\0'
setelah karakter terakhir */
printf( "strncat( s3, s1, 8 ) = %s\n", strncat( s3,
s1, 8 ) );
/*
Menyambungkan s1 ke dalam s3 */
printf( "strcat( s3, s1 ) = %s\n", strcat( s3, s1 ));
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
s1 = Selamat
s2 = Ulang Tahun
strcat( s1, s2 ) = Selamat Ulang Tahun
strncat( s3, s1, 8 ) = Selamat
strcat( s3, s1 ) = Selamat Selamat
Ulang Tahun
Gambar 7.19 | Menggunakan strcat dan strncat
7.7 Fungsi Perbandingan Dari Pustaka Penanganan-String
Bagian ini menyajikan beberapa fungsi
perbandingan-string dari pustaka penanganan-string, yaitu fungsi strcmp dan strncmp. Gambar 7.20 memuat kedua prototipe dan penjelasan singkat atas
masing-masing fungsi.
Prototipe
|
Penjelasan
|
int strcmp( const
char *s1, const char *s2 );
int strncmp( const
char *s1, const char *s2, size_t n );
|
Membandingkan string s1 dengan string s2. Fungsi ini
menghasilkan nilai balik 0, kurang dari 0, atau lebih besar dari 0 jika s1 sama dengan s2, kurang dari
s2, atau lebih dari s2.
Membandingkan sampai dengan n buah karakter dari string s1 dengan
string s2. Fungsi ini menghasilkan nilai balik 0,
kurang dari 0, atau lebih dari 0 jika s1 sama dengan s2, kurang dari s2, atau lebih
dari s2.
|
Gambar 7.20 | Fungsi perbandingan-string dari
pustaka penanganan-string
Gambar 7.21 membandingkan tiga string
menggunakan strcmp dan strncmp. Fungsi strcmp membandingkan argumen string pertamanya dengan argumen string keduanya,
karakter demi karakter. Fungsi ini menghasilkan nilai balik 0 jika kedua string
sama, nilai balik negatif jika string pertama kurang dari string kedua, dan
nilai balik positif jika string pertama lebih dari string kedua. Fungsi strncmp ekivalen dengan strcmp, kecuali bahwa strncmp membandingkan sampai sejumlah karakter
yang telah ditentukan. Fungsi strncmp tidak
membandingkan karakter setelah karakter null di dalam string. Program menampilkan
nilai integer yang dijadikan nilai balik oleh setiap pemanggilan fungsi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/* Gambar 7.21: gambar07_21.c
Menggunakan strcmp dan strncmp */
#include <stdio.h>
#include <string.h>
int main( void )
{
const
char *s1 = "Selamat Ulang Tahun"; /* menginisialisasi pointer char */
const
char *s2 = "Selamat Tahun Baru"; /* menginisialisasi pointer char */
const
char *s3 = "Selamat Berlibur"; /* menginisialisasi pointer char */
printf("%s%s\n%s%s\n%s%s\n\n%s%2d\n%s%2d\n%s%2d\n\n",
"s1 = ", s1, "s2 = ", s2, "s3
= ", s3,
"strcmp(s1, s2) = ", strcmp( s1, s2 ),
"strcmp(s1, s3) = ", strcmp( s1, s3 ),
"strcmp(s3, s1) = ", strcmp( s3, s1 ));
printf("%s%2d\n%s%2d\n%s%2d\n",
"strncmp(s1, s3, 6) = ", strncmp( s1, s3, 6 ),
"strncmp(s1, s3, 7) = ", strncmp( s1, s3, 7 ),
"strncmp(s3, s1, 7) = ", strncmp( s3, s1, 7 ));
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
s1 = Selamat Ulang Tahun
s2 = Selamat Tahun Baru
s3 = Selamat Berlibur
strcmp(s1, s2) = 1
strcmp(s1, s3) = 1
strcmp(s3, s1) = -1
strncmp(s1, s3, 6) = 0
strncmp(s1, s3, 7) = 0
strncmp(s3, s1, 7) = 0
Gambar 7.21 | Menggunakan strcmp dan strncmp
7.8 Fungsi Pencarian Dari Pustaka
Penanganan-String
Bagian ini menyajikan fungsi-fungsi
dari pustaka penanganan-string untuk mencari karakter dan string lainnya
(substring) di dalam suatu string. Semua fungsi dimaksud disimpulkan pada
Gambar 7.22. Fungsi strcpsn dan strspn menghasilkan nilai balik bertipe size_t.
Prototipe
|
Penjelasan
|
char *strchr( const
char *s, int c );
size_t strcspn( const char *s1, const char *s2 );
size_t strspn( const char *s1, const char *s2 );
char *strpbrk( const
char *s1, const char *s2 );
char *strrchr( const
char *s, int c );
char *strstr( const
char *s1, const char *s2 );
char *strtok( char
*s1, const char *s2 );
|
Mencari lokasi kemunculan pertama dari
karakter c dalam string s. Jika c ditemukan, maka sebuah pointer ke c di dalam s dijadikan nilai balik. Sebaliknya, sebuah
pointer NULL dijadikan nilai balik.
Menentukan dan menjadikan nilai balik
berupa panjang awal segmen dari string s1 yang memuat
karakter-karakter yang tidak dimuat di dalam string s2.
Menentukan dan menjadikan nilai balik
berupa panjang awal segmen dari string s1 yang memuat
karakter-karakter yang dimuat di dalam string s2.
Mencari lokasi kemunculan pertama di dalam
string s1 atas sembarang karakter di dalam string s2. Jika sebuah karakter dari string s2 ditemukan, maka suatu pointer yang menunjuk ke
karakter tersebut di dalam string s1 dijadikan nilai balik. Sebaliknya, pointer
NULL dijadikan nilai balik.
Mencari lokasi dari kemunculan akhir dari c di dalam string s. Jika c ditemukan, maka sebuah pointer yang menunjuk ke c di dalam string s dijadikan
nilai balik. Sebaliknya, pointer NULL dijadikan nilai balik.
Mencari lokasi kemunculan akhir di dalam
string s1 atas string s2. Jika string
dimaksud ditemukan, maka sebuah pointer yang menunjuk ke string di dalam s1
dijadikan nilai balik. Sebaliknya, pointer NULL dijadikan nilai balik.
Runtun pemanggilan terhadap strtok memecah string s1 menjadi
beberapa token, yaitu beberapa potongan logis seperti kata di dalam sebaris
teks yang dipisahkan oleh karakter-karakter yang dimuat di dalam string s2. Pemanggilan pertama memuat s1 sebagai argumen pertama, dan pemanggilan selanjutnya
menokenkan string sama yang memuat NULL sebagai argumen pertama. Sebuah
pointer yang menunjuk ke token sekarang dijadikan nilai balik pada setiap
pemanggilan. Jika tidak ada lagi token ketika fungsi dipanggil, NULL
dijadikan nilai balik.
|
Gambar 7.22 | Fungsi pemanipulasi-string dari
pustaka penanganan-string
Fungsi strchr
Fungsi strchr mencari kemunculan pertama dari suatu karakter di dalam sebuah string.
Jika karakter dimaksud ditemukan, maka strchr menghasilkan nilai balik berupa sebuah pointer yang menunjuk ke karakter
tersebut di dalam string; sebaliknya, strchr menghasilkan NULL. Gambar 7.23 menggunakan strchr untuk mencari kemunculan pertama dari ‘a dan ‘z’ di dalam string “Ambon
Manise”.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
/* Gambar 7.23: gambar07_23.c
Menggunakan strchr */
#include <stdio.h>
#include <string.h>
int main( void )
{
const
char *string = "Ambon Manise"; /* menginisialisasi pointer char */
char
karakter1 = 'a'; /* menginisialisasi karakter1 */
char
karakter2 = 'z'; /* menginisialisasi karakter2 */
/*
jika karakter1 ditemukan di dalam string */
if ( strchr( string, karakter1 )
!= NULL ) {
printf( "\'%c\' ditemukan di dalam
\"%s\".\n",
karakter1, string );
} /*
akhir if */
else
{ /* jika karakter1 tidak ditemukan */
printf( "\'%c\' tidak ditemukan di dalam
\"%s\".\n",
karakter1, string );
} /*
akhir else */
/*
jika karakter2 ditemukan di dalam string */
if ( strchr( string, karakter2 )
!= NULL ) {
printf( "\'%c\' ditemukan di dalam
\"%s\".\n",
karakter2, string );
} /*
akhir if */
else
{ /* jika karakter2 tidak ditemukan */
printf( "\'%c\' tidak ditemukan di dalam
\"%s\".\n",
karakter2, string );
} /*
akhir else */
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
'a' ditemukan di dalam "Ambon
Manise".
'z' tidak ditemukan di dalam
"Ambon Manise".
Gambar 7.23 | Menggunakan strchr
Fungsi strcspn
Fungsi strcspn (Gambar 7.24) menentukan panjang awal segmen dari string di dalam argumen
pertamanya yang tidak memuat sembarang karakter dari string di dalam argumen
keduanya. Fungsi ini menghasilkan nilai balik berupa panjang segmen tersebut.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/* Gambar7.24: gambar07_24.c
Menggunakan strcspn */
#include<stdio.h>
#include<string.h>
int main( void )
{
/*
menginisialisasi dua pointer char */
const
char *string1 = "Nilai sebesar 3.14159";
const
char *string2 = "1234567890";
printf( "%s%s\n%s%s\n\n%s\n%s%u\n",
"string1 = ", string1, "string2 = ",
string2,
"Panjang segmen awal dari string1",
"yang tidak memuat sembarang karakter dari string2 = ",
strcspn( string1, string2 ));
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
string1 = Nilai sebesar 3.14159
string2 = 1234567890
Panjang segmen awal dari string1
yang tidak memuat sembarang karakter
dari string2 = 14
Gambar 7.24 | Menggunakan strcspn
Fungsi strpbrk
Fungsi strpbrk mencari lokasi kemunculan pertama di
dalam string s1 atas sembarang karakter di dalam string s2. Jika sebuah
karakter dari string s2 ditemukan, maka suatu pointer yang menunjuk ke karakter
tersebut di dalam string s1 dijadikan nilai balik. Sebaliknya, pointer NULL
dijadikan nilai balik. Gambar 7.25 menunjukkan sebuah program yang mencari
lokasi kemunculan pertama di dalam string string1 atas sembarang karakter di dalam string string2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/* Gambar 7.25: gambar07_25.c
Menggunakan strpbrk */
#include <stdio.h>
#include <string.h>
int main( void )
{
const
char *string1 = "Ini adalah ujian"; /* menginisialisasi
pointer char */
const
char *string2 = "berhati-hatilah"; /* menginisialisasi
pointer char */
printf( "%s\"%s\"\n'%c'%s\n\"%s\"\n",
"Dari semua karakter di dalam ", string2,
*strpbrk( string1, string2 ),
" muncul pertama kali di dalam ", string1 );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Dari semua karakter di dalam
"berhati-hatilah"
'i' muncul pertama kali di dalam
"Ini adalah ujian"
Gambar 7.25 | Menggunakan strpbrk
Fungsi strrchr
Fungsi strrchr mencari
lokasi dari kemunculan akhir dari c di
dalam string s. Jika c ditemukan, maka sebuah pointer yang menunjuk
ke c di dalam
string s dijadikan
nilai balik. Sebaliknya, pointer NULL dijadikan nilai balik. Gambar 7.26 menampilkan sebuah program yang mencari kemunculan terakhir
dari karakter ‘z’ di dalam string “Kebung binatang banyak zebra”.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/* Gambar 7.26: gambar07_26.c
Menggunakan strrchr */
#include <stdio.h>
#include <string.h>
int main( void )
{
/*
menginisialisasi pointer char */
const
char *string1 = "Kebun binatang banyak zebra";
int
c = 'z'; /* karakter yang akan dicari */
printf( "%s\n%s'%c'%s\"%s\"\n",
"Sisa dari string1 yang dimulai dengan",
"kemunculan akhir dari karakter ", c,
" adalah: ", strrchr( string1, c ));
return 0; /* indikasi terminasi
sukses */
} /* akhir main */
|
Sisa dari string1 yang dimulai dengan
kemunculan akhir dari karakter 'z'
adalah: "zebra"
Gambar 7.26 | Menggunakan strrch
Fungsi strspn
Fungsi strspn (Gambar 7.27) menentukan panjang dari segmel awal pada string di dalam
argumen pertamanya yang hanya memuat karakter-karakter dari string di dalam
argumen keduanya. Fungsi ini menghasilkan panjang segmen sebagai nilai balik.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/* Gambar 7.27: gambar07_27.c
Menggunakan strspn */
#include <stdio.h>
#include <string.h>
int main( void )
{
/*
menginisialisasi dua pointer char */
const
char *string1 = "Nilai sebesar 3.14159";
const
char *string2 = "raseb ilN";
printf( "%s%s\n%s%s\n\n%s\n%s%u\n",
"string1 = ", string1, "string2 = ",
string2,
"Panjang dari segmen awal dari string1",
"yang hanya memuat karakter-karakter dari string2 = ",
strspn( string1, string2 ));
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
string1 = Nilai sebesar 3.14159
string2 = raseb ilN
Panjang dari segmen awal dari string1
yang hanya memuat karakter-karakter
dari string2 = 14
Gambar 7.27 | Menggunakan strspn
Fungsi strstr
Fungsi strstr mencari
lokasi kemunculan akhir di dalam string s1 atas string s2. Jika
string dimaksud ditemukan, maka sebuah pointer yang menunjuk ke string di dalam
s1 dijadikan
nilai balik. Sebaliknya, pointer NULL dijadikan nilai balik. Gambar 7.28 menggunakan strstr untuk mencari string “def” di dalam string “abcdefabcdef”.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/* Gambar 7.28: gambar07_28.c
Menggunakan strstr */
#include <stdio.h>
#include <string.h>
int main( void )
{
const
char *string1 = "abcdefabcdef"; /* string tempat
pencarian */
const
char *string2 = "def"; /* string yang akan dicari */
printf(
"%s%s\n%s%s\n\n%s\n%s%s\n",
"string1 = ", string1, "string2 = ",
string2,
"Sisa dari string1 yang diawali dengan",
"kemunculan pertama dari string2 adalah: ",
strstr( string1, string2 ));
return 0; /* indikasi terminasi sukses */
} /* akhir main */
|
string1 = abcdefabcdef
string2 = def
Sisa dari string1 yang diawali dengan
kemunculan pertama dari string2
adalah: defabcdef
Gambar 7.28 | Menggunakan strstr
Fungsi strtok
Fungsi strtok (Gambar 7.29) dipakai untuk memecah string s1 menjadi beberapa token, yaitu beberapa potongan logis
seperti kata di dalam sebaris teks yang dipisahkan oleh karakter-karakter yang
dimuat di dalam string s2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/* Gambar 7.29: gambar07_29.c
Menggunakan strtok */
#include <stdio.h>
#include <string.h>
int main( void )
{
/*
menginisialisasi array string */
char
string[] = "Ini adalah sebuah kalimat dengan 7 token";
char
*tokenPtr; /* menciptakan pointer char */
printf( "%s\n%s\n\n%s\n",
"String yang akan ditokenkan adalah:", string,
"Semua token adalah:" );
tokenPtr = strtok( string, " " ); /* mulai menokenkan
kalimat */
/*
berlanjut menokenkan kalimat sampai tokenPtr menjadi NULL */
while ( tokenPtr != NULL ) {
printf( "%s\n", tokenPtr );
tokenPtr = strtok( NULL, " " ); /* mendapatkan token
berikutnya */
} /*
akhir while */
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
String yang akan ditokenkan adalah:
Ini adalah sebuah kalimat dengan 7
token
Semua token adalah:
Ini
adalah
sebuah
kalimat
dengan
7
token
Gambar 7.29 | Menggunakan strtok
Prototipe
|
Penjelasan
|
void *memcpy( void
*s1, const void *s2, size_t n );
void *memmove( void
*s1, const void *s2, size_t n );
int memcmp( const
void *s1, const void *s2, size_t n );
void *memchr( const
void *s, int c, size_t n );
void *memset( void
*s, int c, size_t n );
|
Menyalin sejumlah n karakter dari objek
yang ditunjuk oleh s2 ke dalam objek yang ditunjuk oleh s1. Pointer yang
menunjuk ke objek yang dihasilkan dijadikan nilai balik.
Menyalin sejumlah n karakter dari objek
yang ditunjuk oleh s2 ke dalam objek yang ditunjuk oleh s1. Penyalinan
dilakukan dengan cara menyalin karakter-karakter dari objek yang ditunjuk
oleh s2 ke dalam suatu array temporer dan kemudian dari array temporer
tersebut ke dalam objek yang ditunjuk oleh s1. Pointer yang menunjuk ke objek
yang dihasilkan dijadikan nilai balik.
Membandingkan sejumlah n karakter pertama dari objek yang
ditunjuk oleh s1 dan objek yang ditunjuk oleh s2. Fungsi ini menghasilkan 0,
kurang dari 0, dan lebih dari 0 jika s1 sama dengan, kurang dari, atau lebih
dari s2.
Mencari lokasi kemunculan pertama dari c
(dikonversi dari unsigned
char) di dalam n
karakter pertama pada objek yang ditunjuk oleh s. Jik c ditemukan, maka
sebuah pointer yang menunjuk ke c di dalam objek dijadikan nilai balik.
Sebaliknya, NULL dijadikan nilai balik.
Menyalin c (dikonversi dari unsigned char) ke dalam n karakter pertama pada objek
yang ditunjuk oleh s. Sebuah pointer yang menunjuk ke hasil dijadikan nilai
balik.
|
Gambar 7.30 | Fungsi memori dari pustaka
penanganan-string
Fungsi memcpy
Fungsi memcpy sejumlah
n karakter dari
objek yang ditunjuk oleh s2 ke
dalam objek yang ditunjuk oleh s1.
Pointer yang menunjuk ke objek yang dihasilkan dijadikan nilai balik. Fungsi
ini dapat menerima sebuah pointer dengan sembarang tipe objek. Hasil dari fungsi
ini tidak terdefinisi jika dua objek saling tumpang-tindih di dalam memori
(misalnya, keduanya merupakan bagian dari objek yang sama). Pada kasus seperti
itu, digunakan memmove. Gambar 7.31 menggunakan memcpy untuk menyalin string di dalam array s2 ke dalam array s1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/* Gambar 7.31: gambar07_31.c
Menggunakan memcpy */
#include <stdio.h>
#include <string.h>
int main( void )
{
char
s1[ 20 ]; /* menciptakan array char s1 */
char
s2[] = "Menyalin string ini"; /* menginisialisasi array char s2 */
memcpy( s1, s2, 20 );
printf( "%s\n%s\"%s\"\n",
"Setelah s2 disalin ke s1 dengan,",
"s1 memuat ", s1 );
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Setelah s2 disalin ke s1 dengan,
s1 memuat "Menyalin string
ini"
Gambar 7.31 | Menggunakan memcpy
Fungsi memmove
Fungsi memmove, seperti memcpy, menyalin sejumlah tertentu byte dari objek yang ditunjuk oleh argumen
keduanya ke dalam objek yang ditunjuk oleh argumen pertamanya. Penyalinan
dilakukan dengan cara byte demi byte disalin dari argumen kedua ke dalam suatu
array karakter temporer, kemudian dari array temporer tersebut disalin ke
argumen pertama. Gambar 7.32 menggunakan memmove dalam menyalin 10 byte terakhir dari array x ke dalam 10 byte pertama pada array x.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/* Gambar 7.32: gambar07_32.c
Menggunakan memmove */
#include <stdio.h>
#include <string.h>
int main( void )
{
char
x[] = "HOME SWEET HOME"; /* menginisialisasi array char x */
printf( "%s%s\n", "String di dalam array x sebelum memmove
adalah: ", x );
printf( "%s%s\n", "String di dalam array x setelah memmove
adalah: ",
memmove( x, &x[ 5 ], 10 ));
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
String di dalam array x sebelum
memmove adalah: HOME SWEET HOME
String di dalam array x setelah
memmove adalah: SWEET HOME HOME
Gambar 7.32 | Menggunakan memmove
Fungsi memcmp
Fungsi memcmp (Gambar 7.33) membandingkan
sejumlah karakter tertentu dari objek argumen pertamanya dan sejumlah
karakter dari argumen keduanya. Fungsi ini menghasilkan 0, kurang dari 0, dan
lebih dari 0 jika argumen pertamanya sama dengan, kurang dari, atau lebih dari argumen
keduanya.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/* Gambar 7.33: gambar07_33.c
Menggunakan memcmp */
#include <stdio.h>
#include <string.h>
int main( void )
{
char
s1[] = "ABCDEFG"; /* menginisialisasi array char s1 */
char
s2[] = "ABCDXYZ"; /* menginisialisasi array char s2 */
printf( "%s%s\n%s%s\n\n%s%2d\n%s%2d\n%s%2d\n",
"s1 = ", s1, "s2 = ", s2,
"memcmp( s1, s2, 4 ) = ", memcmp( s1, s2, 4 ),
"memcmp( s1, s2, 7 ) = ", memcmp( s1, s2, 7 ),
"memcmp( s2, s1, 7 ) = ", memcmp( s2, s1, 7 ));
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
s1 = ABCDEFG
s2 = ABCDXYZ
memcmp( s1, s2, 4 ) = 0
memcmp( s1, s2, 7 ) = -1
memcmp( s2, s1, 7 ) = 1
Gambar 7.33 | Menggunakan memcmp
Fungsi memchr
Fungsi memchr mencari kemunculan pertama dari sebuah byte, yang direpresentasikan
sebagai unsigned char, di dalam sejumlah byte tertentu pada
suatu objek. Jika byte ditemukan, maka sebuah pointer yang menunjuk ke byte
dimaksud di dalam objek dijadikan nilai balik; sebaliknya, pointer NULL
dijadikan nilai balik. Gambar 7.34 menjadi karakter (byte) ‘r’ di dalam string
“Ini adalah sebuah string”.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/* Gambar 7.34: gambar07_34.c
Menggunakan memchr */
#include <stdio.h>
#include <string.h>
int main( void )
{
const
char *s = "Ini adalah sebuah
string"; /* menginisialisasi pointer char */
printf( "%s\'%c\'%s\"%s\"\n",
"Sisa dari s setelah karakter ", 'r',
" ditemukan adalah ", memchr( s, 'r', 24 ));
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
Sisa dari s setelah karakter 'r' ditemukan
adalah "ring"
Gambar 7.34 | Menggunakan memchr
Fungsi memset
Fungsi memset menyalin nilai byte di dalam argumen keduanya ke dalam n byte pertama dari objek yang ditunjuk oleh argumen pertamanya, dimana n dispesifikasi oleh argumen ketiga. Gambar 7.35 menggunakan memset untuk menyalin ‘b’ ke dalam 7 byter pertama pada string1.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/* Gambar 7.35: gambar07_35.c
Menggunakan memset */
#include <stdio.h>
#include <string.h>
int main( void )
{
char
string1[ 15 ] = "BBBBBBBBBBBBBB"; /* menginisialisasi
string1 */
printf( "string1 = %s\n", string1 );
printf( "string1 setelah memset = %s\n", memset(
string1, 'b', 7 ));
return
0; /* indikasi terminasi sukses */
} /* akhir main */
|
string1 = BBBBBBBBBBBBBB
string1 setelah memset =
bbbbbbbBBBBBBB
Gambar 7.35 | Menggunakan memset
Kesimpulan
§
Karakter secara fundamental merupakan blok pembangun program sumber.
Setiap program mengandung rentetan karakter yang, ketika dikelompokkan
sedemikian rupa, diinterpretasikan oleh komputer sebagai serangkaian perintah
yang dipakai dalam menuntaskan pekerjaan. Suatu program bisa memuat konstanta
karakter. Konstanta karakter merupakan sebuah nilai int yang direpresentasikan sebagai karakter yang diapit oleh
tanda kutip tunggal. Nilai suatu konstanta karakter adalah nilai integer dari
karakter di dalam himpunan karakter mesin.
§
String merupakan suatu runtun karakter yang diperlakukan sebagai unit
tunggal. Sebuah string bisa memuat huruf, dijit, dan berbagai karakter spesial
seperti +, -, *, /, dan $. Literal string atau konstanta string dalam C ditulis
diapit dengan tanda kutip ganda.
§
String dalam C merupakan array karakter
yang diakhiri dengan karakter null (‘\0’). String diakses melalui pointer yang
menunjuk ke karakter pertama di dalam string. Nilai suatu string adalah alamat
dari karakter pertamanya.
§
Pustakan penanganan-karakter (<ctype.h>) menyertakan beberapa fungsi yang melakukan manipulasi dan pengujian
terhadap data karakter. Setiap fungsi menerima sebuah karakter, yang
direpresentasikan sebagai suatu int, atau sebuah
EOF.
§
Fungsi isalpha menentukan apakah argumennya merupakan sebuah huruf besar (A-Z) atau
huruf kecil (a-z). Fungsi isalnum menentukan apakah argumennya sebuah huruf besar, huruf kecil, atau dijit.
Fungsi isxdigit menentukan apakah argumennya adalah dijit heksadesimal (A-F, a-f, 0-9).
§
Fungsi isupper menentukan apakah argumennya merupakan huruf besar (A-Z). Fungsi tolower mengkonversi huruf besar menjadi huruf
kecil dan menghasilkan nilai balik berupa huruf kecil. Jika argumen tidak huruf
besar, maka tolower menghasilkan nilai balik berupa argumen yang tidak berubah. Fungsi toupper mengkonversi huruf kecil menjadi huruf
besar dan menghasilkan nilai balik berupa huruf besar. Jika argumen tidak huruf
kecil, maka toupper menghasilkan nilai balik berupa argumen yang tidak berubah.
§
Fungsi isspace menentukan jika sebuah karakter adalah salah satu dari karakter
spasi-putih: spasi (‘ ‘), form feed
(‘\f’), garis-baru (‘\n’), carriage
return (‘\r’), tab horisontal (‘\t’), tab vertikal (‘\v’). Fungsi iscntrl menentukan jika sebuah karakter adalah
salah satu dari karakter kontrol: tab horisontal (‘\t’), tab vertikal (‘\v’), form feed (‘\f’), alert (‘\a’), backspace
(‘\b’), carriage return (‘\r’), atau
garis-baru (‘\r’). Fungsi ispunct menentukan jika sebuah karakter adalah suatu karakter printing selain spasi, dijit, atau huruf, seperti $, #, (, ),
[, ], {, }, :, atau %. Fungsi isprint menentukan apakah sebuah karakter dapat ditampilkan pada layar (termasuk
karakter spasi). Fungsi isgraph sama seperti isprint, kecuali bahwa karakter spasi tidak disertakan.
§
Fungsi atof (Gambar 7.6)
mengkonversi argumennya, sebuah string yang merepresentasikan suatu angka
titik-mengambang (pecahan), menjadi suatu nilai double. Fungsi ini menghasilkan nilai balik berupa nilai double. Jika nilai terkonversi tidak dapat
direpresentasikan, misalnya, karena karakter pertama dari string adalah sebuah
huruf, maka watak fungsi atof menjadi
tak-terdefinisi.
§
Fungsi atoi (Gambar 7.7)
mengkonversi argumennya, sebuah string dijit yang merepresentasikan suatu angka
integer, menjadi suatu nilai int. Fungsi ini
menghasilkan nilai balik berupa nilai int. Jika nilai terkonversi tidak dapat direpresentasikan,
misalnya, karena karakter pertama dari string adalah sebuah huruf, maka watak
fungsi atoi menjadi
tak-terdefinisi.
§
Fungsi atol (Gambar 7.8)
mengkonversi argumennya, sebuah string dijit yang merepresentasikan suatu angka
integer yang panjang, menjadi suatu nilai long. Fungsi ini menghasilkan nilai balik berupa nilai long. Jika nilai terkonversi tidak dapat
direpresentasikan, misalnya, karena karakter pertama dari string adalah sebuah
huruf, maka watak fungsi atol menjadi
tak-terdefinisi. Jika int dan long keduanya disimpan dalam 4-byte, maka
fungsi atoi dan atol akan menghasilkan keluaran yang
identik.
§
Fungsi strtod (Gambar 7.0) mengkonversi runtun karakter yang merepresentasikan nilai
pecahan menjadi double. Fungsi ini menerima dua argumen, yaitu sebuah string (char *) dan sebuah pointer yang menunjuk ke
string (char **). String tersebut memuat runtun karakter yang akan dikonversi menjadi double. Pointer ditugaskan kepada lokasi dari
karakter pertama setelah potongan terkonversi dari string.
§
Fungsi strtol (Gambar 7.10) mengkonversi runtun karakter yang merepresentasikan nilai
integer menjadi long. Fungsi ini
menerima tiga argumen, yaitu sebuah string (char *), sebuah pointer yang menunjuk ke string (char **), dan sebuah integer. String tersebut
memuat runtun karakter yang akan dikonversi menjadi long. Pointer ditugaskan kepada lokasi dari karakter pertama
setelah potongan terkonversi dari string. Integer menspesifikasi nilai basis
yang dipakai untuk konversi.
§
Fungsi strtoul (Gambar 7.11) mengkonversi runtun karakter yang merepresentasikan sebuah
integer unsigned long menjadi nilai unsigned long. Fungsi ini bekerja identik dengan fungsi strtol.
§
Fungsi fgets membaca
karakter demi karakter dari masukan standar ke dalam argumen pertamanya, sebuah
array char, sampai
ditemukan karakter garis-baru atau indikator end-of-file atau sampai jumlah karakter maksimum terlah terbaca.
Jumlah karakter maksimum adalah lebih sedikit satu dari nilai yang ditentukan
di dalam argumen kedua dari fungsi fgets. Argumen ketiga
menspesifikasi aliran dari mana karakter dibaca, pada kasus ini, digunakan
aliran masukan standar (stdin). Karakter null
(‘\0’) disambungkan ke dalam array char (argumen
pertama).
§
Fungsi putchar menampilkan argumen karakternya. Program memanggil fungsi rekursif balik untuk menampilkan sebaris teks dengan
gaya mundur. Jika karakter pertama dari array yang diterima oleh balik adalah
karakter null ‘\0’, maka fungsi balik akan memberikan
nilai balik. Sebaliknya, balik dipanggil
kembali dengan alamat subarray dimulai dari elemen s[1], dan karakter s[0] ditampilkan
dengan putchar ketika pemanggilan rekursif selesai dilakukan.
§
Fungsi getchar membaca sebuah karakter dari masukan standar dan menghasilkan nilai balik
berupa integer (dari karakter tersebut). Fungsi puts mengambil sebuah string (char *) sebagai argumen dan menampilkan string tersebut diikuti
dengan karakter garis-baru.
§
Fungsi strcpy menyalin argumen keduanya (sebuah string) ke dalam argumen pertamanya
(sebuah array karakter yang harus cukup besar untuk menampung string dan
karakter null penghenti, yang juga disalin). Fungsi strncpy ekivalen dengan strcpy, kecuali bahwa strncpy menspesifikasi jumlah karakter yang akan disalin dari string ke dalam
array. Fungsi strncpy tidak harus menyalin karakter null penghenti dari argumen keduanya.
Karakter null penghenti hanya disalin jika jumlah karakter yang akan disalin
sedikitnya satu lebih panjang dari panjang string.
§
Fungsi strcat menyambungkan argumen keduanya (sebuah string) ke dalam argumen
pertamanya (sebuah array karakter yang memuat string). Karakter pertama dari
argumen kedua menggantikan karakter null (‘\0’) yang menghentikan string di
dalam argumen pertama. Anda harus memastikan bahwa array yang digunakan untuk
menyimpan string pertama harus cukup besar dalam menyimpan string pertama, string kedua, dan karakter null penghenti
yang disalin dari string kedua. Fungsi strncat menyambungkan sejumlah karakter dari string kedua ke dalam
string pertama. Karakter null penghenti secara otomatis ditempelkan ke dalam
hasil.
§
Fungsi strcmp membandingkan argumen string pertamanya dengan argumen string keduanya,
karakter demi karakter. Fungsi ini menghasilkan nilai balik 0 jika kedua string
sama, nilai balik negatif jika string pertama kurang dari string kedua, dan
nilai balik positif jika string pertama lebih dari string kedua. Fungsi strncmp ekivalen dengan strcmp, kecuali bahwa strncmp membandingkan sampai sejumlah karakter
yang telah ditentukan. Fungsi strncmp tidak membandingkan karakter setelah karakter null di dalam string.
§
Fungsi strchr mencari kemunculan pertama dari suatu karakter di dalam sebuah string.
Jika karakter dimaksud ditemukan, maka strchr menghasilkan nilai balik berupa sebuah pointer yang
menunjuk ke karakter tersebut di dalam string; sebaliknya, strchr menghasilkan NULL.
§
Fungsi strcspn menentukan panjang awal segmen dari string di dalam argumen pertamanya
yang tidak memuat sembarang karakter dari string di dalam argumen keduanya.
Fungsi ini menghasilkan nilai balik berupa panjang segmen tersebut.
§
Fungsi strpbrk mencari lokasi kemunculan pertama di
dalam string s1 atas sembarang karakter di dalam string s2. Jika
sebuah karakter dari string s2 ditemukan, maka suatu pointer yang menunjuk ke karakter
tersebut di dalam string s1 dijadikan nilai balik. Sebaliknya, pointer NULL
dijadikan nilai balik.
§
Fungsi strspn menentukan panjang dari segmel awal pada string di dalam argumen
pertamanya yang hanya memuat karakter-karakter dari string di dalam argumen
keduanya. Fungsi ini menghasilkan panjang segmen sebagai nilai balik.
§
Fungsi strstr mencari
lokasi kemunculan akhir di dalam string s1 atas string s2. Jika string dimaksud ditemukan, maka sebuah
pointer yang menunjuk ke string di dalam s1 dijadikan nilai balik. Sebaliknya, pointer
NULL dijadikan nilai balik.
§
Fungsi strtok dipakai untuk memecah string s1 menjadi beberapa token, yaitu beberapa
potongan logis seperti kata di dalam sebaris teks yang dipisahkan oleh
karakter-karakter yang dimuat di dalam string s2.
§
Fungsi memcpy sejumlah
n karakter dari
objek yang ditunjuk oleh s2 ke dalam objek yang ditunjuk oleh s1. Pointer yang
menunjuk ke objek yang dihasilkan dijadikan nilai balik. Fungsi ini dapat
menerima sebuah pointer dengan sembarang tipe objek. Hasil dari fungsi ini
tidak terdefinisi jika dua objek saling tumpang-tindih di dalam memori
(misalnya, keduanya merupakan bagian dari objek yang sama).
§
Fungsi memmove, seperti memcpy, menyalin sejumlah tertentu byte dari objek yang ditunjuk oleh argumen
keduanya ke dalam objek yang ditunjuk oleh argumen pertamanya. Penyalinan dilakukan
dengan cara byte demi byte disalin dari argumen kedua ke dalam suatu array
karakter temporer, kemudian dari array temporer tersebut disalin ke argumen
pertama.
§
Fungsi memcmp membandingkan sejumlah karakter tertentu dari objek argumen
pertamanya dan sejumlah karakter dari argumen keduanya. Fungsi ini menghasilkan
0, kurang dari 0, dan lebih dari 0 jika argumen pertamanya sama dengan, kurang
dari, atau lebih dari argumen keduanya.
§
Fungsi memchr mencari kemunculan pertama dari sebuah byte, yang direpresentasikan
sebagai unsigned char, di dalam sejumlah byte tertentu pada suatu objek. Jika byte ditemukan,
maka sebuah pointer yang menunjuk ke byte dimaksud di dalam objek dijadikan
nilai balik; sebaliknya, pointer NULL dijadikan nilai balik.
§
Fungsi memset menyalin nilai byte di dalam argumen keduanya ke dalam n byte pertama dari objek yang ditunjuk
oleh argumen pertamanya, dimana n dispesifikasi oleh argumen ketiga.
Soal
1)
Apa yang ditampilkan, jika ada, ketika setiap
statemen C berikut dieksekusi? Jika statemen memuat error, deskripsikan
kesalahannya dan tunjukkan bagaimana mengoreksinya. Asumsikan definisi variabel
berikut: char s1[ 50 ] = "aurora", s2[ 50 ] = " adam", s3[ 50 ], *sptr;
a) printf( "%c%s", toupper( s1[ 0 ] ), &s1[ 1 ] );
b) printf( "%s", strcpy( s3, s2 ) );
c) printf( "%s", strcat( strcat(
strcpy( s3, s1 ), " and " ), s2 ) );
d) printf( "%u", strlen( s1 ) + strlen(
s2 ) );
e) printf( "%u", strlen( s3 ) );
2)
Temukan kesalahan di dalam masing-masing segmen
program berikut dan jelaskan bagaimana mengoreksinya:
a) char s[ 10 ];
strncpy( s, "hallo", 5 );
printf( "%s\n", s );
b) printf( "%s", 'a' );
c) char s[ 12 ];
strcpy( s, "Selamat Datang" );
d) if ( strcmp( string1, string2 ) ) {
printf( "String sama\n" );
}
3)
Tulislah suatu program yang membaca sebuah
karakter dari papan-ketik dan uji karakter tersebut dengan setiap fungsi di
dalam pustaka penanganan-karakter. Program harus menampilkan nilai balik dari
setiap fungsi.
4)
Tulislah sebuah program yang membaca sebaris teks
ke dalam sebuah array char, s[100]. Tampilkan baris teks
tersebut dalam huruf besar dan dalam huruf kecil.
5)
Tulislah sebuah program yang membaca empat string yang merepresentasikan
integer, konversi string tersebut menjadi integer, jumlahkan semua nilainya, dan
kemudian tampilkan total dari keempat nilai tersebut.
6)
Tulislah sebuah program yang membaca empat string yang merepresentasikan nilai pecahan, konversi string tersebut menjadi double, jumlahkan semua nilainya, dan
kemudian tampilkan total dari keempat nilai tersebut.
7)
Tulislah sebuah program yang menggunakan fungsi strcmp untuk
membandingkan dua string yang dimasukkan oleh pengguna. Program harus menguji
keadaan apakah string pertama kurang dari, sama dengan, atau lebih dari string
kedua.
8)
Tulislah sebuah program yang menggunakan fungsi
strncmp untuk untuk membandingkan dua string yang dimasukkan oleh pengguna.
Program harus membaca jumlah karakter yang akan dibandingkan, kemudian
menampilkan apakah string pertama kurang dari, sama dengan, atau lebih dari
string kedua.
9)
Tulislah dua versi atas tiap fungsi
penyambungan-string dan penyalinan-string pada Gambar 7.17. Versi pertama harus
menggunakan pensubskriptan array, dan versi kedua harus menggunakan pointer dan
aritmatika pointer.
10)
Tulislah versi Anda sendiri atas fungsi getchar, putchar, dan puts pada Gambar
712.
11)
Tulislah dua versi atas tiap fungsi
perbandingan-string pada Gambar 7.20. Versi pertama harus menggunakan
pensubskriptan array, dan versi kedua harus menggunakan pointer dan aritmatika
pointer.
12)
Tulislah versi Anda sendiri atas setiap fungsi
pada Gambar 7.22 untuk pencarian string.
No comments:
Post a Comment