String

Tipe data string adalah tipe data yang menyimpan "rangkaian huruf" dalam satu variabel. Dalam bahasa C, kita bisa menampilkan rangkaian huruf yang sudah kita simpan sesuai urutan aslinya. Urutan huruf tersebut bisa berupa kata-kata atau kumpulan huruf acak yang tidak bermakna.

Ada tiga macam tipe string yang bisa kita temukan dalam beberapa bahasa pemrograman, yaitu:
  1. String yang disimpan sebagai objek.
  2. Null terminated string
  3. Zero length string

Zero length string merupakan bentuk tipe data string dalam bahasa pascal. Dalam bahasa C++ yang digunakan adalah string yang disimpan sebagai objek. Kalau kalian menggunakan bahasa C, kalian harus menggunakan null terminated string. Deklarasi null terminated string bisa menggunakan pointer atau array dengan tipe data karakter. 

Akhir dari string yang disimpan dalam bahasa C ditandai dengan karakter null yang merupakan karakter ascii dengan angka 0, karena itu string dalam bahasa C disebut "null terminated string". NULL (0) yang disimpan dalam array karakter adalah angka 0 dan bukan karakter '0'. Contoh sederhana penggunaan string dalam bahasa C adalah seperti di bawah ini.

#include <stdio.h>

int main(){
char *s="Halo Dunia!";
    printf("s = %s", s);
    return 0;
}

String yang dideklarasikan sebagai pointer tidak dapat diubah nilainya karena itu memang hanya ditujukan untuk ditampilkan dan disalin nilainya. Jika kita ingin mengubah nilai string, gunakan array dengan ukuran array yang lebih panjang dari jumlah karakter dalam string. Array yang menyimpan string harus lebih panjang dari panjang stringnya karena ada karakter NULL (0) yang ada di akhir string.

Untuk mencetak string kalian bisa juga menggunakan fungsi "printf". Fungsi puts dan printf menghasilkan output yang sedikit berbeda. Keluaran dari puts diakhiri dengan perpindahan baris, sedangkan keluaran dari printf tidak dilanjutkan dengan perpindahan baris kecuali ada "\n". Untuk menyalin null terminated string ke string lain kita butuh strcpy. Kita tidak bisa menggunakan tanda sama dengan jika stringnya berupa array. Jika stringnya berupa pointer, maka yang disalin dengan tanda sama dengan adalah alamatnya dan bukan isinya. Function puts dan printf terdapat pada header stdio.h, sedangkan fungsi lain seperti strcpy dan strlen untuk string terdapat pada header "string.h".
#include <stdio.h>
#include <string.h>

int main(){
char *s="Halo Dunia";
char t[20];
    strcpy(t, s);
    t[5]=0;
    strcat(t, "Kawan!");
    printf("Nilai t = ");
    puts(t);
    printf("panjang string yang tersimpan = %d", strlen(t));
    return 0;
}

Pada contoh di atas, fungsi yang terdapat pada header "string.h" adalah strlen, strcat dan strcpy. Function strcpy digunakan untuk menyalin isi string sedangkan function strlen digunakan untuk mengetahui panjang string. Selain itu, pada contoh di atas, kita juga mengubah panjang string menjadi 5 dengan mengubah karakter ke-5 menjadi 0 ( NULL ) sehingga karakter lain setelah karakter NULL diabaikan. String dianggap hanya berisi kata "Halo " tanpa kata "dunia" yang ada setelahnya. Kemudian, kita menambahkan kata kawan dengan menggunakan function strcat.

Selain printf dan puts yang digunakan untuk mencetak output, fungsi lain yang dapat digunakan untuk tipe data string yaitu :
  1. scanf ("%s", s) : Meminta input berupa tipe data string.
  2. atoi (s) : mengubah string s menjadi bilangan bulat.
  3. atof (s) : mengubah string s menjadi bilangan dengan tipe data float.
  4. sprintf(s, ...) : mengubah tipe data bilangan bulat maupun float menjadi string.
  5. snprintf(s, ...) : versi lain dari sprintf yang membatasi panjang string yang dihasilkan.
Kita harus menggunakan "stdlib.h" saat menggunakan function atoi dan atof. Untuk scanf, sprintf dan snprintf; header yang kita gunakan adalah "stdio.h". Untuk scanf, kita akan membahasnya saat kita membahas tentang input. Berikut ini adalah contoh cara mengubah string menjadi bilangan bulat dan pecahan desimal.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
char s1[20]="20";
char s2[20]="25.2";
char s3[20];

int n1;
float n2;
    n1=atoi(s1);
    n2=atof(s2);
    if(strcmp(s1, s2)!=0)sprintf(s3, "%s + %s = %.1f", s1, s2, n1+n2);
    printf("%s", s3);
    return 0;
}

Selain fungsi strlen yang digunakan untuk mengetahui panjang string ada fungsi lain yang terdapat dalam "string.h". Beberapa fungsi dalam header "string.h"yang dapat kita gunakan yaitu :
  • strlen(s) : Panjang string variabel s.
  • strupr(s) : mengubah semua huruf dalam string variabel s menjadi huruf besar.
  • strlwr(s) : mengubah semua huruf dalam string variabel s menjadi huruf kecil.
  • strcpy(s1, s2) : untuk menyalin string dari variabel s1 ke dalam variabel s2.
  • strcat(s1, s2) : Untuk menggabungkan string dalam variabel s1 dan s2.
  • strcmp(s1, s2) : Untuk membandingkan string dalam variabel s1 dan s2. Jika s1 isinya "sama dengan" s2, maka nilai kembalian function strcmp adalah 0.
s, s1 dan s2 hanya contoh nama variabel untuk menjelaskan jumlah parameter yang bisa digunakan. Semua parameter dari function-function tersebut tipe datanya adalah "array dari karakter (char)".

Input Untuk Tipe Data String

Untuk tipe data string, ada beberapa function yang bisa kalian gunakan untuk mendapatkan input dari pengguna. Kalian bisa menggunakan scanf dan gets untuk bahasa C. 

Function scanf hanya mengambil satu kata sebelum spasi kecuali kalian menggunakan "trik khusus". Kalau kalian ingin mendapatkan isi dari string yang berupa array dengan tipe data char, gunakan scanf dengan regular expression.

#include <stdio.h>

int main(){
char s[100];
    scanf("%[^\n]s", s);
    printf("%s", s);
    return 0;
}

Kalian bisa mengapit karakter-karakter yang boleh digunakan dengan tanda "kurung kotak". Jika ada tanda panah ke atas (^), maka yang ditunjukkan adalah karakter yang tidak boleh digunakan dalam input. Jika scanf menemukan karakter yang tidak boleh digunakan, scanf akan berhenti menyimpan karakter ke dalam variabel. Pada contoh di atas, karakter yang tidak boleh digunakan adalah karakter khusus untuk "new line ( \n )".

Untuk yang malas mengetik, dowload source code-nya di sini.