Mau kaos (T-shirt) Wordpress keren? (Selengkapnya)

Pasang banner (468x60) di sini


Dapatkan Script SMS Gateway PHP + MySQL

Seperti: software pengirim SMS massal, SMS survei, SMS polling, SMS quick count, SMS dakwah, Web2SMS dan masih banyak lagi... semuanya berbasis PHP & MySQL
[Info Lengkap...]


Algoritma Membalik String (String Reverse)


December 20th, 2008 | by rosihanari | Cetak Artikel Ini Cetak Artikel Ini

Artikel ini didasari pada pertanyaan mas Tedy Winanto (sobat saya di YM). Teman saya ini bingung bagaimana caranya membalik suatu string. Dan.. karena saya telah menjanjikan pada mas Tedy kalau saya sempat, saya akan posting di blog saya ini bagaimana algoritma membalik string ini dan implementasinya ke program/script, maka saat inilah saya akan memenuhi janjinya.

OK… misalkan diberikan suatu string ‘KOMPUTER’, dan kita ingin membalik string tersebut sehingga menjadi ‘RETUPMOK’, bagaimana algoritmanya?

Ya… secara logika untuk membalik suatu string dengan panjang karakter sejumlah n, cukup menukar posisi karakter ke – 1 dengan karakter ke-n, dan karakter ke-2 ditukar posisi dengan karakter ke n-1, dst. Sekarang yang menjadi masalah adalah… sampai berapa kali proses penukaran ini dilakukan, apakah n kali? Coba kita cek proses ini bila diterapkan pada string ‘KOMPUTER’ tsb, dalam hal ini n = 8 (panjang string 8 karakter).

Penukaran ke-1, tukar posisi karakter ke-1 dg ke-8, hasilnya ‘ROMPUTEK
Penukaran ke-2, tukar posisi karakter ke-2 dg ke-7, hasilnya ‘REMPUTOK’
Penukaran ke-3, tukar posisi karakter ke-3 dg ke-6, hasilnya ‘RETPUMOK’
Penukaran ke-4, tukar posisi karakter ke-4 dg ke-5, hasilnya ‘RETUPMOK’
Penukaran ke-5, tukar posisi karakter ke-5 dg ke-4, hasilnya ‘RETPUMOK’
Penukaran ke-6, tukar posisi karakter ke-6 dg ke-3, hasilnya ‘REMPUTOK’
Penukaran ke-7, tukar posisi karakter ke-7 dg ke-2, hasilnya ‘ROMPUTEK’
Penukaran ke-8, tukar posisi karakter ke-8 dg ke-1, hasilnya ‘KOMPUTER

Bila proses penukaran dilakukan n kali, ternyata hasil akhir string tetap kembali ke string semula. So… salah donk. Dengan demikian, kita tidak bisa menulis algoritmanya sbb:

{ x adalah string yang akan ditukar }
n := length(x); { n = panjang string }
for i = 1 to n do
begin
    // tukar antara karakter ke-i dengan karakter ke- (n+1-i)
    temp := x[i];
    x[i] := x[n+1-i];
    x[n+1-1] := x[i];
end;

Jadi… sampai berapa kali proses penukarannya? Anda perhatikan pada proses penukaran tahap demi tahap di atas. Pada langkah berapakah stringnya menjadi ‘RETUPMOK’? Ya tepat sekali, yaitu pada langkah ke-4.

OK… dari contoh ini bisa kita catat, bahwa untuk n = 8, kita butuh 4 kali langkah penukaran. Sekarang bagaimana bila n = 10? Coba selidiki… dan ternyata butuh 5 kali penukaran. Nah… dari sini bisa kita simpulkan bahwa untuk n genap, proses penukaran yang dibutuhkan ada n/2 kali.

Sekarang bagaimana dengan n ganjil? Kita ambil contoh misal n = 7. Berapakah jumlah proses penukarannya? Coba selidiki… dan ternyata butuh 3 kali. Lho apa tidak 4 kali? Mmmm… untuk yang ke-4 boleh kita tidak lakukan karena karakter ke-4 adalah karakter yang berada di tengah string, so… gak perlu ditukar. Untuk n = 9, akan butuh 4 kali penukaran. dan seterusnya… Dengan demikian untuk n ganjil, proses penukaran yang dilakukan juga sejumlah n/2 kali, tapi n/2 di sini dibulatkan ke bawah.

Untuk n genap pun, jumlah proses penukaran karakter juga dapat diterapkan pembulatan ke bawah dari n/2, karena misal n= 8, dan hasil n/2 kalau dibulatkan ke bawah juga menghasilkan 4.

So… algoritma yang benar untuk membalik string adalah:

{ x adalah string yang akan ditukar }
n := length(x); { n = panjang string }
for i = 1 to floor(n/2) do {maksud floor adalah pembulatan ke bawah}
begin
    // tukar antara karakter ke-i dengan karakter ke- (n+1-i)
    temp := x[i];
    x[i] := x[n+1-i];
    x[n+1-1] := x[i];
end;

Nah… sekarang kita implementasikan algoritma di atas ke PHP. Bagaimana bentuk script untuk membalik string? O… iya… ingat bahwa dalam PHP, karakter pertama dari suatu string itu dimulai dari nomor indeks ke-0, sehingga harap hati-hati. Ini dia scriptnya:

<?php
 
$x = 'KOMPUTER';
$n = strlen($x);
for ($i = 0; $i<=floor(($n-1)/2); $i++)
{
	$temp = $x[$i];
	$x[$i] = $x[$n-1-$i];
	$x[$n-1-$i] = $temp;
}
 
echo $x;
?>

dan ini dia implementasi ke dalam program Pascal

program balikstring;
var x : string; i, n : integer; temp : char;
begin
    x := 'KOMPUTER';
    n := length(x);
    for i:=1 to trunc(n/2) do
    begin
        temp := x[i];
        x[i] := x[n+1-i];
        x[n+1-1] := x[i];
    end;
    write(x);
end.

OK deh…. demikian algoritma untuk membalik string. Mudah-mudahan ada manfaatnya.

Eh… sebelum di tutup artikel ini, cobalah cek apakah algoritma simpel berikut ini juga bisa digunakan untuk membalik string?

{ x adalah string yang akan ditukar }
n := length(x); { n = panjang string }
for i = 1 to n do
begin
    x[i] := x[n+1-i];
end;

Mmmm…. secara sekilas sih ‘kayaknya’ bisa. Tapi kalau Anda yakin jawabannya ‘bisa’, silakan buat ke dalam program algoritma tersebut dan lihatlah hasilnya. Tentu hasilnya di luar dugaan dan Anda akan dibuat tercengang dibuatnya. Kok bisa ya? :-)

Oya, satu lagi, khusus di PHP, Anda tidak perlu repot-repot membuat script untuk membalik string karena telah disediakan function khusus untuk melakukan hal itu. Function yang dimaksud adalah strrev(). Berikut ini contoh penggunaannya:

<?php
echo strrev("Hello world!"); // outputnya "!dlrow olleH"
?>

OK… met membolak-balik string ya.


Beberapa artikel terkait


Share this article on:

Kata kunci: algoritma - reverse - string -


Ada 10 komentar dalam artikel ini.

  1. TedyWinanto says:

    Thanx berat pak… mantab nich jawabannya,Padet banget… semoga selalu di beri kesehatan dan rizky yang lancar pak
    aminnn

  2. bias says:

    mumet, memutar balikkan string
    maibi isoh dadi alogaritma ya mas, hehehehe
    alogaritma enskripsi n deskripsi :D

    :wong pekok kakean omong, mlayu weh:

  3. TedyWinanto says:

    terima kasih mas atas ilmunya ini :D

  4. angel says:

    Hello Pak

    aku mahasiswi dan sedang tugas akhir..
    aku mau nanya nich, emang klo algoritma membalik string (string reverse diatas) implementasinya buat apa yach?

    bisa di deskripsi gak.. biasanya dipake dalam kasus apa ja.. ^^

    Thanx ya Pak..
    Angel..

  5. rosihanari says:

    to angel: aplikasinya bisa buat ngecek apakah suatu string termasuk palindrom atau bukan (palindrom itu string yang dibaca dari depan dan dari belakang sama)

  6. ariel says:

    Pak, saya mau nanya nee,
    Kalo algoritmanya kaya gini bisa ga’??

    Var
    kata:string;
    Procedure balik(s:string);
    var
    i,n:integer;
    begin
    n:= length(s);
    for i:= n downto 1 do write(s[i]);
    end;
    { Program Utama }
    Begin
    write(‘Masukkan sebuah kata : ‘);
    readln(kata);
    write (kata,’ dibalik : ‘);
    balik(kata);
    readln;
    end.

  7. rosihanari says:

    to ariel: bisa saja, namun yang anda balik adalah tampilannya di layar ketika dirun, namun string ‘kata’ sendiri kan tidak terbalik isinya. Paham maksud saya ya.. Jadi yang saya balik di sini adalah susunan huruf dalam stringnya, bukan di tampilannya dengan membaca string dari belakang.

  8. ariel says:

    Makasi banyak ya pak, saya paham..
    God Bless

  9. ariel says:

    Sorry pak, saya mau nanya lagi nee…
    Gimana cara kita membedakan sebuah file teks dan biner dengan menggunakan fungsi assign, mohon penerangannya…

  10. rosihanari says:

    to ariel: wah saya belum pernah nyoba mas



Tolong beri komentar donk!

Komentar Anda akan berguna untuk kemajuan blog ini.


Mohon maaf, komentar yang menggunakan email palsu atau komentar bernada negatif atau cemooh secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil dalam daftar komentar.

Dimohon jangan pula memasukkan code program dalam bentuk apapun ke dalam komentar karena akan dianggap spam.

*
Untuk membuktikan bahwa komentar Anda bukan spam, tulis kata yang muncul dalam gambar di bawah ini. Bila Anda tidak bisa membaca kata dalam gambar, klik pada gambar tersebut untuk mendengarkan suara dari kata tersebut
Click to hear an audio file of the anti-spam word