Anda di halaman 1dari 16

KOM120B #13

String

Tim Pengajar
KOM120B – Algoritme dan Dasar Pemrograman

Departemen Ilmu Komputer - FMIPA


String
● String adalah array of character yang diakhiri oleh
sebuah karakter NULL ('\0'). Dan ingat juga bahwa
array dapat dinyatakan sebagai pointer ke elemen pertama.
● Literal string dapat ditulis menggunakan tanda kutip ganda ("). Jadi,
"bogor" berarti:
{'b','o','g','o','r','\0'}
sehingga untuk menyimpan string ”bogor” diperlukan array of char
sebanyak minimal 6:
char kota[6]="bogor"; // as an array
char *s1="ipb"; // as a pointer
● Format untuk membaca dan menuliskan string adalah %s.
Tim Pengajar KOM120B IPB University
String is Array of Char
#include <stdio.h>
int main() {
char *s1="ipb";
char s2[]="bogor";
char s3[]={'a','l','g','o','r','\0'};
char *s4;
s4=s3; // keduanya adalah pointer
s3=s2; // error, krn keduanya adalah array
printf("%s\n%s\n%s\n", s1, s2, s3);
printf("%c\n", s2[2]);
n ya?
return(0); t put
a ou
} Ap
Tim Pengajar KOM120B IPB University
Membaca String
#include <stdio.h>
#define SIZE 15
int main() {
int n;
char s1[SIZE], s2[SIZE];
char ch1, ch2;
scanf("%d", &n);
scanf("%c%c", &ch1, &ch2); Apa output program jika
scanf("%s%s", &s1, &s2); diberikan input:
printf("%d%c%c\n", n, ch1, ch2); 19
printf("%s\n%s\n", s1, s2); ab
return(0); ipb bogor
} darmaga

Tim Pengajar KOM120B IPB University


Fungsi gets()
● Membaca karakter dari standard input (stdin) dan
menyimpannya sebagai string sampai (until) karakter
newline atau EOF.
● Sintaks:
char *gets (char *str); // str : array of char
● Contoh:
Warning:
char st[100]; this program uses gets(), which
gets(st); is unsafe.
printf("%s", st);
● Problem:
○ Warning ← karena tidak memperhatikan batas ukuran array
○ Read until newline → karakter newline tidak terbaca
Tim Pengajar KOM120B IPB University
Fungsi fgets()
● Membaca karakter dari stream input
(termasuk standard input) dan menyimpannya
sebagai string, dan berhenti saat satu atau lebih
syarat berikut terpenuhi:
○ sudah sebanyak (n-1) karakter terbaca; n adalah ukuran array.
○ karakter newline terbaca → tidak seperti gets()
○ EOF
● Sintaks:
char *fgets(char *str, int n, FILE *stream)
● Contoh:
char st[100];
fgets(st, sizeof(st), stdin);
printf("%s", st);
Tim Pengajar KOM120B IPB University
Membaca String Lebih Fleksibel
● Menggunakan DMA untuk array of char.
● Baca setiap character dari stdin, berhenti setelah bertemu '\n’.
● Contoh fungsi:

char* getln()
{
char *str, c;
int i = 0, j = 1;

str = (char*)malloc(sizeof(char));
while (c != '\n') {
c = getc(stdin); // baca character dari stdin
str = (char*)realloc(str, j * sizeof(char));
str[i] = c;
i++; j++;
}
str[i] = '\0'; // tanda akhir dari string
return str;
}

Tim Pengajar KOM120B IPB University


C Library of String → #include <string.h>
void *memchr(const void *str, int c, size_t n)
int memcmp(const void *str1, const void *str2, size_t n)
void *memcpy(void *dest, const void *src, size_t n)
void *memmove(void *dest, const void *src, size_t n)
void *memset(void *str, int c, size_t n)
char *strcat(char *dest, const char *src)
char *strncat(char *dest, const char *src, size_t n)
char *strchr(const char *str, int c)
int strcmp(const char *str1, const char *str2)
int strncmp(const char *str1, const char *str2, size_t n)
int strcoll(const char *str1, const char *str2)
char *strcpy(char *dest, const char *src)
char *strncpy(char *dest, const char *src, size_t n)
size_t strcspn(const char *str1, const char *str2)
char *strerror(int errnum)
size_t strlen(const char *str)
char *strpbrk(const char *str1, const char *str2)
char *strrchr(const char *str, int c)
size_t strspn(const char *str1, const char *str2)
char *strstr(const char *haystack, const char *needle)
char *strtok(char *str, const char *delim)
Tim Pengajar KOM120B IPB University
Array of String
● Misal kita akan menyimpan 5 daftar nama
mahasiswa ke dalam array. Maka dibutuhkan
deklarasi array dua dimensi, yaitu:
○ baris untuk menampung banyaknya nama mahasiswa
○ kolom untuk menampung panjang string nama.
● Contoh:
char nama[][40]=
{"Indah Nian", "Elokwati", "Nan Elok", "Amboi", "Mantab"};
● Apa output perintah berikut?
printf("%s\n",nama[1]);
printf("%c\n",nama[1][2]);

Tim Pengajar KOM120B IPB University


Whitespace Problem
● Perhatikan 2 string berikut:
char st1[]={'i','p','b','\n','\0’};
char st2[]={'i','p','b','\0’};
● Kedua string tersebut, jika di-print, akan menghasilkan teks yang sama, yaitu
ipb. Namun jika dibandingkan, keduanya tidak sama. Problem ini muncul
karena string st1 mengandung whitespace.
● Oleh karena itu, dalam membandingkan dua nilai string, sering dilakukan
penghapusan whitespace à sering disebut trim a string. Caranya?
char *trim(char *s) {
char *ptr;
if (!s) return NULL; // NULL string
if (!*s) return s; // empty string
for (ptr = s + strlen(s) - 1; (ptr >= s) && isspace(*ptr); --ptr);
ptr[1] = '\0';
return s;
}
Tim Pengajar KOM120B IPB University
Mengambil Sub String
Memotong suatu string st dimulai dari posisi start, sebanyak len karakter.
Sebagai contoh: substring("IPB University", 1, 5) à "PB Un"
char* substring(char *st, int start, int len)
{
char *res;
int i=0;
res=(char *)malloc((len+1)*sizeof(char)); // char res[len+1];

while (i<start && *st!='\0') { // pindahkan pointer ke posisi start


st++; i++;
}
i=0;
while (i<len && *st!='\0') { // ambil substring mulai posisi start
res[i] = *st;
i++; st++;
}
res[i] = '\0';
return res;
}

Tim Pengajar KOM120B IPB University


Membaca N Data Teks
Contoh: Bagaimana membaca N judul buku berikut dan memasukkan ke
dalam array?

5
Fur Immer Dein Ian
Majnun
I Think I Love You
Where Stories Begin
Ramai Yang Dulu Kita Bawa Pergi

Tim Pengajar KOM120B IPB University


Membaca N Data Teks
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *trim(char *s);

int main() {
int n;
char **judul;
scanf("%d ", &n);
judul = (char **)malloc(n*sizeof(char *));
for(int i=0; i<n; i++) {
judul[i] = (char *)malloc(250*sizeof(char));
fgets(judul[i], 250, stdin);
judul[i]=trim(judul[i]); // trim a string
}

.....;
return 0;
}

Tim Pengajar KOM120B IPB University


Latihan #1
Buat program membaca n baris kalimat (maks 250 karakter), dan
tuliskan kalimat pada baris tertentu sesuai query yang diberikan.
Akhir query adalah -9.
Contoh input:
3
Jika ada yang bilang ku lupa kau.
Jangan kau dengar.
Jika ada yang bilang ku tak setia.
1 3 2 -9

Contoh output:
Jika ada yang bilang ku lupa kau.
Jika ada yang bilang ku tak setia.
Jangan kau dengar.

Tim Pengajar KOM120B IPB University


Latihan #2
Buat program membaca masukan beberapa baris data yang tiap barisnya
adalah usia (integer, kolom 1-2), dan nama (string, kolom 3-40). Keluaran
program adalah daftar nama dan diakhiri dengan rata-rata usia (ditulis dua digit
di belakang titik).

Contoh masukan:
2
26Indah Nian
24Eloklah

Contoh keluaran:
Indah Nian
Eloklah
25.00

Tim Pengajar KOM120B IPB University


Latihan #3
Buat program membaca masukan beberapa baris data yang tiap barisnya adalah
usia dan nama yang dipisahkan oleh titik-koma. Keluaran program adalah daftar
nama dan diakhiri dengan rata-rata usia (ditulis dua digit di belakang titik).

Contoh masukan:
2
26;Indah Nian
24;Elok Sekali

Contoh keluaran:
Indah Nian
Elok Sekali
25.00

Tim Pengajar KOM120B IPB University

Anda mungkin juga menyukai