PRAKTIKUM
VII
STRING
A. Tujuan Instruktional Khusus
1. Menjelaskan tentang
konsep string
2. Menjelaskan operasi
I/O pada string.
3. Menjelaskan cara
mengakses elemen string
4.
Menjelaskan berbagai fungsi mengenai string
B. Teori Dasar
1 Konstanta dan Variabel String
String merupakan bentuk data yang biasa dipakai dalam bahasa pemrograman
untuk keperluan menampung dan memanipulasi data teks, misalnya untuk menampung
(menyimpan) suatu kalimat. Pada bahasa
C, string bukanlah merupakan tipe data tersendiri, melainkan hanyalah kumpulan
dari nilai-nilai karakter yang berurutan dalam bentuk array berdimensi satu.
1.1 Konstanta String
|
A B C
D E \0
|
Gambar 1 Komposisi penyimpanan string dalam memori
Setiap
karakter akan menempati memori sebesar 1 byte.
Byte terakhir otomatis akan berisi karakter NULL (\0). Dengan mengetahui bahwa suatu string diakhiri
nilai NULL, maka akhir dari nilai suatu string akan dapat dideteksi. Sebagai sebuah array karakter, karakter
pertama dari nilai string mempunyai indeks ke-0, karakter kedua mempunyai
indeks ke-1, dan seterusnya.
1.2 Variabel String
Variabel
string adalah variabel yang dipakai utuk menyimpan nilai string. Misalnya :
char name[15]; merupakan instruksi untuk mendeklarasikan variabel string dengan panjang maksimal 15 karakter (termasuk karakter NULL). Deklarasi tersebut sebenarnya tidak lain merupakan deklarasi array bertipe char.
char name[15]; merupakan instruksi untuk mendeklarasikan variabel string dengan panjang maksimal 15 karakter (termasuk karakter NULL). Deklarasi tersebut sebenarnya tidak lain merupakan deklarasi array bertipe char.
2 Inisialisasi String
Suatu
variabel string dapat diinisialisasi seperti halnya array yang lain. Namun tentu saja elemen terakhirnya haruslah
berupa karakter NULL. Sebagai
contoh : char name[] =
{'R','I','N', 'I',’\0’}; yang menyatakan bahwa name adalah variabel string dengan nilai awal berupa string
: “RINI” . Bentuk inisialisasi yang
lebih singkat : char name[] = “RINI”;Pada bentuk ini,
karakter NULL tidak perlu ditulis.
Secara implisit akan disisipkan oleh kompiler. Perlu diperhatikan, bila name dideklarasikan sebagai string, penugasan (assignment) suatu string
ke variabel string seperti name = “RINI”;
3 Input
Output Data String
3.1
Memasukkan Data String
Pemasukan data string ke dalam suatu
variabel biasa dilakukan dengan fungsi gets()
atau scanf(). Bentuk umum pemakaiannya adalah sebagai
berikut :
#include
<stdio.h> gets(nama_array); atau #include
<stdio.h> scanf(“%s”, nama_array);
Perhatikan : Ã nama_array
adalah variabel bertipe array of char yang akan digunakan untuk
menyimpan string masukan.
Ã
Di depan nama_array tidak perlu ada operator &
(operator alamat), karena
nama_array tanpa kurung siku sudah menyatakan alamat yang ditempati
oleh elemen pertama dari array tsb.
Ã
Kalau memakai scanf(), data
string masukan tidak boleh mengandung spasi.
.
|
|
name :
|
D Z
U L M
Y
W \0
|
name
:
karakter NULL
byte
sisa tak dipakai
Gambar.2 Variabel
string dan data string
Pada gambar di atas nama array
tanpa kurung siku (name) menyatakan alamat dari lokasi data string. Dan dengan pemasukan data seperti di atas,
lokasi memori yang terletak sesudah lokasi yang berisi ‘N’ akan secara otomatis terisi karakter NULL (lihat gambar 7.2) Perlu diketahui, fungsi gets()
akan membaca seluruh karakter yang diketik melalui keyboard sampai tombol ENTER
ditekan. Dalam hal ini tidak ada
pengecekan terhadap batasan panjang array yang merupakan
argumennya.
Jika string yang dimasukkan
melebihi ukuran array, maka sisa string (panjang string masukan dikurangi
ukuran array plus karakter NULL) akan ditempatkan di lokasi sesudah
bagian akhir dari array tersebut. Tentu
saja kejadian seperti ini bisa menimbulkan hal yang tidak diinginkan, misalnya
berubahnya isi variabel yang dideklarasikan sesudah array tersebut karena
tertumpuki oleh string yang dimasukkan (overwrite), atau perilaku
program yang sama sekali berbeda dengan kemauan user yang dalam hal ini
pelacakan kesalahannya (debugging) sangat sulit dilakukan, atau bahkan
terjadi penghentian program secara tidak normal. Untuk mengatasi hal itu, disarankan untuk menggunakan fungsi fgets()
untuk menggantikan fungsi gets() dalam memasukkan data
string. Bentuk umum pemakaian fgets()
adalah : #include <stdio.h> fgets(nama_array, sizeof
nama_array, stdin);.
3.2
Menampilkan Isi Variabel String
Untuk menampilkan isi variabel
string, fungsi yang digunakan adalah puts() atau printf(). Bentuk umum pemakaiannya adalah sebagai
berikut : #include <stdio.h> puts(var_string); atau printf("%s",var_string);
Dalam hal ini var_string adalah sebuah variabel yang berupa sebuah
array of char. Fungsi puts()
akan menampilkan isi dari var_string dan secara otomatis
menambahkan karakter '\n' di
akhir string. Sedangkan fungsi printf() akan menampilkan isi
variabel string tanpa memberikan tambahan '\n'.
Sehingga, agar kedua pernyataan di atas memberikan keluaran yang sama,
maka pada pernyataan printf() dirubah menjadi : printf("%s\n",
var_string);.
4 Mengakses Elemen String
Variabel
string merupakan bentuk khusus dari array bertipe char. Oleh karena itu, elemen dari variabel string
dapat diakses seperti halnya pengaksesan elemen pada array. Perhitungan jumlah karakter dari string teks
dapat dilakukan dengan memeriksa elemen dari string dimulai dari posisi yang
pertama (indeks ke-0) sampai ditemukannya karakter NULL. Elemen yang ke-i dari teks dinyatakan dengan teks[i] Pemeriksaan terhadap teks[i] selama tidak berupa karakter
NULL (dimulai dari indeks ke-0) dilakukan dengan instruksi for(i=0; teks[i]; i++) jumkar++; Kondisi teks[i] pada for
mempunyai makna yang secara implisit berupa teks[i] != ‘\0; atau “karakter yang ke-i dari teks
tidak sama dengan karakter NULL” Selama keterangan[i] tidaklah berupa
karakter NULL, maka keterangan[i] disalin ke kalimat[i].
Jelas
bahwa di dalam loop while tidak terdapat penyalinan karakter NULL dari keterangan
ke kalimat. Oleh karena
itu sekeluarnya dari loop while, pemberian karakter NULL ke kalimat
perlu dilakukan. Pernyataan yang
digunakan berupa kalimat[i] = ‘\0’; Bentuk
yang lebih singkat untuk melakukan penyalinan dari keterangan ke kalimat berupa i=0; while (kalimat[i] = keterangan[i]) i++; Dengan penulisan seperti di atas,
penyalinan karakter NULL juga akan dilakukan secara otomatis. Setelah menyalin karakter NULL (karena
kondisi bernilai NULL) maka eksekusi terhadap loop akan dihentikan. Dengan demikian sekeluarnya dari loop tidak
perlu lagi ada pernyataan. kalimat[i] = ‘\0’;
5
Fungsi-Fungsi Mengenai String
Berikut ini akan dibahas
beberapa fungsi pustaka yang umumnya disediakan oleh kompiler C untuk
mengoperasikan suatu nilai string.
Fungsi-fungsi pustaka untuk operasi string, prototype-prototype nya
berada di file judul string.h.
Beberapa di antara fungsi pustaka untuk operasi string akan dibahas di
bawah ini.
5.1 Fungsi strcpy() untuk Menyalin
Nilai String
Bentuk pemakaian : #include <string.h> strcpy(tujuan,
asal) Fungsi ini dipakai untuk
menyalin string asal ke variabel string tujuan termasuk
karakter '\0'. Keluaran dari fungsi ini (return
value) adalah string tujuan.
Dalam hal ini, variabel tujuan haruslah mempunyai ukuran
yang dapat digunakan untuk menampung seluruh karakter dari string asal.
5.3 Fungsi strlen() untuk Mengetahui Panjang Nilai String
Bentuk
pemakaian : #include
<string.h> strlen(var_string); Fungsi ini digunakan untuk memperoleh banyaknya karakter di dalam string
yang menjadi argumennya (var_string). Keluaran dari fungsi ini adalah panjang dari var_string. Karakter NULL tidak ikut dihitung.
5.3 Fungsi strcat() untuk
Menggabung Nilai String
Bentuk pemakaian : #include
<string.h> strcat(tujuan, sumber); Menggabungkan
dua buah nilai string tidak dapat dilakukan dengan operator ‘+’, karena
operator ini bukan operator untuk operasi string. Penggabungan dua buah nilai string dapat
dilakukan dengan fungsi pustaka strcat() dengan menambahkan
string sumber ke bagian akhir dari string tujuan. Keluaran dari fungsi ini adalah string tujuan. Dalam hal ini str1 (“sala”) digabungkan dengan str2
(“tiga”) dengan hasilnya berada di str1 (“salatiga”).
5.4 Fungsi strcmp() untuk
Membandingkan Dua Nilai String
Membandingkan dua nilai string
juga tidak dapat digunakan dengan operator hubungan, karena operator tersebut
tidak untuk operasi string.
Membandingkan dua buah nilai string dapat dilakukan dengan fungsi
pustaka strcmp(). Contoh bentuk pemakaian
fungsi : #include <string.h> strcmp(str1, str2); Fungsi ini dipakai untuk membandingkan string str1
dengan string str2. Keluaran
dari fungsi ini bertipe int yang berupa nilai :
§
-1, jika str1 kurang dari str2
§
0, jika str1 sama dengan str2
§
1, jika str1 lebih dari str2
Pembandingan dilakukan untuk karakter pada posisi yang sama
dari str1 dan str2, dimulai dari karakter
terkiri. Acuan pembandingan dari dua
buah karakter didasarkan oleh nilai ASCII-nya.
Misal, karakter ‘A’ lebih kecil daripada ‘B’ dan karakter ‘B lebih kecil
daripada ‘C’.
5.5 Fungsi strchr() untuk Mencari
Nilai Karakter dalam String
Bentuk pemakaian : #include
<string.h> strchr(var_string,
kar); Fungsi ini dapat digunakan untuk mencari suatu nilai karakter yang berada
dalam suatu nilai string. Dalam hal ini
adalah mencari karakter kar dalam string var_string. Keluaran dari fungsi ini adalah alamat posisi
dari karakter pertama pada nilai string, yang sama dengan karakter yang
dicari. Jika karakter yang dicari tidak
ada dalam nilai string, maka fungsi ini akan memberikan hasil nilai pointer
kosong (null) penggunaan fungsi strchr()
untuk mencari nilai karakter ‘B’ dan karakter ‘X’ dalam string ‘ABcde’. Karakter ‘B’ ada dalam nilai string yang
dicari, sehingga fungsi strchr() memberikan hasil alamat dari
karakter B tersebut yang kemudian alamat ini disimpan dalam variabel pointer hasil1. Jika variabel pointer hasil1
ini ditampilkan dengan menggunakan kode format untuk nilai string (%s), maka mulai dari alamat tersebut sampai
dengan akhir dari nilai string yang bersangkutan akan ditampilkan, sehingga
didapatkan keluaran : Mencari karakter B
= Bcde. Sedangkan pencarian karakter ‘X’ memberikan
hasil null karena karakter tersebut tidak ditemukan dalam string ‘ABcde”, sehingga didapatkan keluaran : Mencari karakter X = (null).
C. Daftar Alat dan Bahan.
1. CPU
2. Monitor
3. Keyboard
4. Mouse
5. Printer
6. Job Sheet Praktikum
D. Langkah Kerja.
1. Menghidupkan Komputer sampai menyala dan
mengeluarkan layar Windows.
2. Memilih Start pada ujung kiri bawah monitor.
3. Memilih Program.
4.
Memilih Program Turbo C atau TC for windows.
5.
Apabila Layar Turbo C sudah keluar, kemudian Memilih File.
6.
Memilih News untuk membuka Program baru, atau open untuk membuka
file program yang telah dibuat sebelumnya.
7.
Mengetik Program sesuai dengan data pada program.
8.
Selesai pengetikan, Memilih
file dan mengesave as program
tersebut dengan nama file sesuai keinginan.
9.
Mengcompile program tersebut untuk melihat kebenaran pengetikan
program dan untuk mengubah file dengan extension .cpp menjadi file .hex, .bin
dan. .obj.
10. Selesai Mengcompile maka memilih run untuk menjalankan program tersebut.
11. Melihat hasilnya pada monitor dan mencatat, kemudian menganalisa hasil percobaan.
12. Melakukan percobaan untuk file program berikutnya dengan cara yang tertera pada langkah 6 sampai 11.
E. Data Program
/*
File program : nama.c */
#include
<stdio.h>
#define
MAKS 15
Void
main()
{
char nama[MAKS];
printf("Masukkan nama Anda : ");
gets(nama);
printf("\nHalo, %s. Selamat belajar string.\n", nama);
}
2.
Variasi dalam menginisialisasi string.
|
/*
File program : initStr.c */
#include
<stdio.h>
void
bentuk1(void);
void
bentuk2(void);
void
main()
{
bentuk1();
bentuk2();
}
|
|
void
bentuk1(void)
{
char kompiler_c[] =
{'V','i','s','u','a','l','
','C','+','+','\0'};
puts(kompiler_c);
}
|
void
bentuk2(void)
{
char kompiler_c[] = "Visual C++";
printf("%s\n", kompiler_c);
}
|
/*
File Program : hitkar.c */
#include
<stdio.h>
#define
MAKS 256
Void
main()
{
int i, jumkar;
char teks[MAKS];
puts("Masukkan suatu kalimat (maks
255 karakter).");
puts("Saya akan menghitung jumlah
karakternya.\n");
fgets(teks, sizeof teks, stdin);
jumkar = 0;
for(i=0; teks[i]; i++)
jumkar++;
printf("\nJumlah karakter =
%d\n", jumkar);
}
|
4. Menyalin sebuah string masukan.
/* File program : salinstr1.c */
#include <stdio.h>
#define MAKS 256
main()
{
int i
= 0;
char
keterangan[MAKS], kalimat[MAKS];
printf("Masukkan
kalimat yang mau disalin :\n");
fgets(keterangan,
sizeof keterangan, stdin);
while
(keterangan[i] != '\0')
{
kalimat[i]
= keterangan[i];
i++;
}
printf("\nIsi
salinan kalimat :\n%s\n", kalimat);
}
5.
Menyalin isi string1 ke string2 menggunakan fungsi strcpy().
/* File program :salinstr2.c */
#include <string.h>
Void main()
{
char
str1[80];
char
str2[]="ABCDE";
strcpy(str1,
str2); /* menyalin isi str2 ke str1 */
printf("String
pertama adalah : %s\n", str1);
printf("String
kedua adalah : %s\n", str2);
}
6.
Menghitung suatu string masukan menggunakan fungsi strlen().
/* File program : panjangstr.C */
#include <stdio.h>
#include <string.h>
#define MAKS 256
Void main()
{
char
kal[MAKS];
printf("Masukkan
kalimat yang akan dihitung
panjangnya
:\n");
fgets(kal,
sizeof kal, stdin);
printf("\nPanjang
string tsb = %d karakter\n",
strlen(kal));
}
7.
Menggabungkan isi string1 dengan string2 menggunakan fungsi strcat().
/* File program :gabungstr.c */
#include <stdio.h>
#include <string.h>
#define PJG 15
Void main()
{
char
str1[PJG], str2[PJG];
strcpy(str2,
"tiga"); /* str2 diisi
"tiga" */
printf("str1
--> %s str2 --> %s\n",
str1, str2);
}
8.
Membandingkan isi string1 dengan string2 menggunakan fungsi strcmp().
/* File program : bandingstr1.c */
#include <stdio.h>
#include <string.h>
Void main()
{
char
string1[]="ABcde";
char
string2[]="ABCDE";
int
hasil;
hasil
= strcmp(string1, string2);
if(hasil
== 0)
printf("String1
sama dengan string2\n");
else
if(hasil < 0)
printf("String1
lebih kecil dari string2\n");
else
printf("String1
lebih besar dari string2\n");
}
9.
Membandingkan isi string1 dengan string2 menggunakan fungsi strcmp().
/* File program : bandingstr2.c */
#include <stdio.h>
#include <string.h>
Void main()
{
char
str1[]="HALO";
char
str2[]="Halo";
char
str3[]="HALO";
printf("Hasil
pembandingan %s dengan %s --> %d\n",
str1,
str2, strcmp(str1, str2));
printf("Hasil
pembandingan %s dengan %s --> %d\n",
str2,
str1, strcmp(str2, str1));
printf("Hasil
pembandingan %s dengan %s --> %d\n",
str1,
str3, strcmp(str1, str3));
10.
Mencari karakter dalam sebuah string menggunakan fungsi strchr().
/* File program : carikar.c */
#include <stdio.h>
#include <string.h>
Void main()
{
char
str[]="ABcde";
char
*hasil1;
char
*hasil2;
hasil1
= strchr(str, 'B');
hasil2
= strchr(str, 'X');
printf("Dari
string ABcde\n");
printf("Mencari
karakter B = %s\n", hasil1);
printf("Mencari
karakter X = %s\n", hasil2);
/* File program : kiri.c */
#include <stdio.h>
#include <string.h>
#define MAKS 30
void strkiri(char [], int, char []);
void main()
{
char
kata[MAKS], tampung[MAKS];
int pj,
i;
printf("Kata
yang ditampilkan : ");
scanf("%s",kata);
pj =
strlen(kata);
printf("\n");
for
(i=pj; i>0; i--)
{
strkiri(kata,
pj-i, tampung);
printf("%s\n",
tampung);
}
printf("\n");
}
void strkiri(char asal[], int n, char
hasil[])
{
int i;
for(i=0;
i<=n; i++)
hasil[i]
= asal[i];
hasil[i]
= '\0'; /* beri karakter NULL */
F. SOAL
- Ketikkan
sebuah kalimat melalui keyboard dengan menggunakan gets() (atau fgets())
kemudian didapatkan keluaran berupa laporan tentang jumlah huruf kecil dan
huruf kapital dalam kalimat tsb.
- Masukkan nama Anda, rubah ke dalam huruf besar
semua, balikkan urutan hurufnya, selanjutnya tampilkan hasilnya di layar.
- Ketikkan
sebuah kalimat, hitung dan tampilkan jumlah spasinya.
- Ketikkan
sebuah kalimat, kemudian tampilkan kalimat tsb satu kata perbaris. Asumsikan ada satu spasi yang memisahkan
setiap kata dan kalimat diakhiri dengan sebuah tanda titik.
- Ketikkan
sebuah kalimat melalui keyboard kemudian didapatkan keluaran berupa
laporan apakah kalimat tsb palindrom ataukah bukan. Misal :
Kalimat :
KASUR RUSAK
Termasuk
PALINDROM
Kalimat :
MAKAN MALAM
Bukan PALINDROM
Catatan :
disebut palindrom adalah bila urutan kalimat dibalik akan menghasilkan kalimat
yang sama. Gunakan berbagai fungsi
berkaitan dengan string yang sudah dijelaskan di atas.