download

Matakuliah
Tahun
Versi
: T0616 / Algoritma dan Pemrograman
: 2007
: 1/0
Pertemuan 19-20
String
1
Learning Outcomes
Pada akhir pertemuan ini, diharapkan mahasiswa
akan mampu :
• Menerapkan manipulasi string berdasar
konsep tipe data string (C3)
2
Outline Materi
String
• Definisi string
• Fungsi Input dan Output string
• Inisialisasi string
• Header string.h
3
Definisi String
• String dalam bahasa C adalah array of character yang
diakhiri dengan null character.
• Sekuen karakter yang diapit oleh double quote (“_“).
char s[ ] = “BiNus”;
atau
char s[ ] = {‘B’,’i’,’N’,’u’,’s’,’\0’};
• Simbol null character adalah ‘\0’ dengan nilai Ascii 0
• Null character otomatis ditambahkan oleh sistem.
• String bukanlah tipe data di c.
4
Karakter vs String
• Karakter dalam bahasa C diapit oleh single
quote. Tiap karakter menempati satu byte
memori.
• ‘A’ adalah karakter A
• 1 byte memori
• String diapit oeh double quote.
• “A” adalah string A
• Dua byte memori, satu untuk ‘A’ dan satu untuk ‘\0’
yang otomatis ditambahkan oleh sistem.
5
Konstanta vs Variabel String
• Konstanta string:
• String yang tidak dapat diubah isinya.
• “Saya BiNusian”
• Variabel string:
• Diinput menggunakan fungsi scanf() .
• Tidak perlu operator alamat ‘&’ karena nama string
isinya adalah alamat.
6
Konstanta vs Variabel String
• CONTOH
#include<stdio.h>
void main( ) {
char nama [30];
printf(“\nInput nama Anda “);
scanf(“%s”, nama);
printf(“\nNama Anda: %s”, nama);
}
7
Kelemahan Scanf
• Menggunakan karakter white space untuk
mengakhiri pemasukan nilai variabel.
• Tidak dapat digunakan untuk
memasukkan string yang terdiri dari
beberapa kata.
• Hanya kata pertama yang akan diambil
oleh scanf().
• Misalkan scanf(“%s”, nama); diisi
“sylvana marine” maka hanya “sylvana”
yang akan diambil.
8
Fungsi Input Output String
• Fungsi gets()
• Membaca string dari keyboard.
• Berhenti hanya jika [Enter] ditekan.
• Spasi dan tab dianggap sebagai bagian dari string.
• Fungsi puts()
• Pasangan fungsi gets().
• Untuk mencetak string.
• Tidak ada fasilitas menata format.
9
Fungsi Input Output String
• CONTOH
void main() {
char namaJurusan[21];
puts(“Input nama jurusan Anda”);
gets(namaJurusan);
puts(“Nama jurusan Anda :”);
puts(namaJurusan);
}
10
Inisialisasi String
• Karakter individual diapit oleh ‘ ‘
• char nama[ ] = {‘n’, ‘a’, ‘n’, ‘a’, ‘\0’};
• char nama[5] = {‘n’, ‘a’, ‘n’, ‘a’, ‘\0’};
• char nama[4] = {‘n’, ‘a’, ‘n’, ‘a’, ‘\0’};
//error
• Sekuen karakter diapit oleh “ “
• char nama[ ] = “nana”;
• char nama[5] = “nana”;
• char nama[4] = “nana”;
//error
11
Inisialisasi String
• Contoh :
• char a[ ] = {‘b’, ‘i’, ‘n’, ‘u’, ‘s’};
• char b[ ] = “binus”;
• char c[8] = “binus”;
//not a string
//ok
//ok
12
Inisialisasi String
• Contoh :
/* Inisialisasi string */
#include <stdio.h>
void main() {
char str1[ ] = {`A', ` `,
`s', `t', `r', `i', `n', `g', ` `,
`c', `o', `n', `s', `t', `a', `n', `t', `\0'};
char str2[] = "Another string constant";
int i;
/* mencetak str2 */
for (i=0; str1[i]; i++)
printf("%c", str1[i]);
printf("\n");
/* mencetak str2 */
for (i=0; str2[i]; i++)
printf("%c", str2[i]);
}
13
Header string.h
• Berisi fungsi-fungsi untuk memanipulasi string.
• strlen()
Menghasilkan panjang string, tidak menghitung karakter null.
• strcpy(s1,s2)
Copy s2 ke s1.
• strncpy(s1,s2,n)
Copy n karakter pertama s2 ke s1.
• strcat(s1,s2)
Menambahkan string s2 ke akhir dari string s1.
• strncat(s1,s2,n)
Menambahkan n karakter string s2 ke akhir dari string s1.
• strcmp(s1,s2)
Membandingkan isi string s1 dan s2, jika isinya sama maka nilainya 0.
14
Header string.h
• Contoh :
char s1[ ] = “abcdef”;
char s2[ ] = “xyz”;
strlen(“nana”);
strcmp(“nana”, “nana”)
strcpy(s1,s2);
strncpy(s1,s2,2);
strncpy(s1,s2,4);
strcat(s1,s2);
strncat(s1,s2,2);
// 4
// bernilai 0
// s1 = “xyz”, s2 = “xyz”
// s1 = “xyabcdef”, s2 = “xyz”
// jika n>=strlen(s2) efek sama
// dengan strcpy() s1 = “xyz”
// s1=“abcdefxyz”, s2=“xyz”
// s1=“abcdefxy”, s2=“xyz”
s1 = “Happy”
s2 = “New Year”
strcat( s1, s2 )
strncat( s3, s1, 6 )
strcat( s3, s1 )
// s1= “Happy New Year”
// s1= “Happy”
// s1= “Happy Happy New Year”
15
Header string.h
• Contoh :
/* Copy string */
#include <stdio.h>
#include <string.h>
void main() {
char str1[] = "Copy a string.";
char str2[15];
char str3[15];
int i;
strcpy(str2, str1);
// dengan strcpy()
for (i=0; str1[i]; i++)
// tanpa strcpy()
str3[i] = str1[i];
str3[i] = `\0';
/* menampilkan str2 dan str3 */
printf("The content of str2: %s\n", str2);
printf("The content of str3: %s\n", str3);
}
16
Latihan
• Diberikan sebuah array karakter :
char str1[] = "Latihan.";
• Buat program untuk mengkopi string dari
str1 ke str2
17
Latihan
• Diberikan sebuah array karakter :
char str1[] = “Happy";
char str1[] = “New Year";
• Buat program untuk menghasilkan str3
yang berisi :
– “Happy New Year”
– “Happy Year”
18
Latihan
• Buat program untuk:
– mengambil string dari keyboard
– membalik susunan karakter dalam string tsb
– menampilkan string yg sudah dibalik ke layar
monitor
Contoh: String yg diinput :
Ditampilkan :
KASUR
RUSAK
19
Latihan
• Palindrom adalah kata yang dibaca dari
belakang dan depan sama saja.
• Contoh : SUGUS, TAMAT (coba cari contoh
yang lain)
• Tugas Anda adalah membuat program untuk
menerima input string dari keyboard dan
mengecek apakah sebuah kata palindrom atau
bukan.
• Contoh :
Masukkan kata : KASUR
Bukan Palindrom
Makukkan kata : sugus
Palindrom
20
Latihan
• Buatlah sebuah program untuk menginput
nama Anda dari keyboard dan
menggerakkan string nama Anda dari
posisi kiri atas layar ke posisi kanan
bawah ( dari pos(0,0), pos(1,1,), pos(2,2),
pos(3,3) s/d pos(24,24) )
21
Latihan
• Jelaskan apakah output program berikut !
#include <stdio.h>
void main() {
char str[80];
int i, delt = `a' - `A';
printf(“Input string (maks 80 char):\n");
gets( str );
i = 0;
while (str[i]){
if ((str[i] >= `a') && (str[i] <= `z'))
str[i] -= delt;
++i;
}
printf(“Hasil string :\n");
puts( str );
}
Adakah
cara lebih
mudah ?
22
Latihan
Apa yang akan dicetak oleh kode berikut:
char s[] = “Bina Nusantara”;
int count = 0;
for(char *p = s; *p; p++)
if(isupper(*p)) ++count;
printf(“\n%d “, count);
Apa yang akan dicetak oleh kode berikut:
char s[] = “Bina Nusantara”;
for(char *p = s; *p; p++)
if(isupper(*p)) *p = tolower(*p);
printf(“\n%s “, s);
23
Latihan
Apa tugas fungsi cp() berikut:
char* cp(char *s1, const char *s2) {
for(char *p = s1; *s2; *p++ = *s2++;
*p = ‘\0’;
return s1;
}
Apa tugas fungsi rev() berikut :
void rev() {
for(char *end = s; *end; end++)
char temp;
while(s < end -1) {
temp = *--end;
*end = *s;
*s++ = temp;
}
}
24