Untuk apa Anda menggunakan pembalikan string? [Tutup]

15

Dalam PHP strrev(), dalam Rails .reverse, tetapi sebagian besar bahasa tidak memiliki fungsi string terbalik. Beberapa memiliki fungsi array terbalik yang dapat digunakan pada karakter. Saya berpikir ini harus menjadi pengawasan besar tetapi kemudian terpikir oleh saya, apa yang akan Anda gunakan untuk membalikkan string ???

Satu-satunya waktu saya dapat berpikir saya telah melihatnya dalam demo dan pelajaran untuk mengubah "Hello World!" menjadi "! dlroW olleH".

Pertanyaanku adalah; Apakah ada gunanya membalikkan sebuah string atau itu sama sekali tidak ada gunanya?

.

Tambahan

Ada jauh lebih banyak jawaban yang telah saya antisipasi dan tidak semuanya sepenuhnya bersifat akademis. Saya akan menaruh uang sehingga tidak ada yang bisa memberikan contoh yang sah. Saya juga tidak berpikir saya akan belajar sesuatu yang baru tetapi saran regex Mark Canlas hanya brilian dan saya menantikan kesempatan untuk membuktikannya sendiri. Terimakasih untuk semua.

clockworkgeek
sumber
@clockworkgeek - jika Anda meminta kandidat untuk melakukan pembalikan string dalam bahasa favorit mereka, Anda akan terkejut betapa banyak yang tidak menemukan fungsi dasar yang Anda sebutkan. Lalu berapa banyak yang tidak dapat membuat loop untuk mengimplementasikannya sendiri.
justkt
@justkt - Itu adalah pertanyaan lain yang menunggu untuk terjadi tetapi mungkin menjadi topik untuk TopCoder.
clockworkgeek
6
Untuk mengirim pesan teks yang bisa dibaca di kaca spion saat mengemudi, sehingga polisi tidak akan memperhatikan.
JeffO
@ justkt - Jika saya harus menulis loop berulang untuk melakukannya, saya akan mulai di ujung yang berlawanan bertukar chars sampai tengah tercapai. Tapi lalu bagaimana Anda menukar dua nilai? Berikut ini adalah jawaban terbaik yang pernah saya berikan:a ^= b; b ^= a; a ^= b;
clockworkgeek
1
saya menggunakan pembalikan string untuk membalikkan string;)
Muad'Dib

Jawaban:

19

Sexegers

Terkadang, masalah yang melibatkan ekspresi reguler dapat lebih mudah ditulis dengan meminta string input dibalik dan menangani masalah dengan cara yang berbeda.

Teknik kesopanan dari pria yang mengajari saya Perl.

Sexeger di PerlMonks

Mark Canlas
sumber
Terima kasih. Trik yang sangat berguna untuk menemukan yang terakhir dari sesuatu. Sepatutnya dicatat.
clockworkgeek
Saya sudah melakukan ini selama bertahun-tahun. Membantu mengurai alamat email.
sal
23

Nah, ini adalah jawaban yang tidak jelas.

"Kembali pada hari" Aku memiliki kotak Unix, dan memiliki file kamus kata-kata bahasa Inggris, yang digunakan untuk memeriksa ejaan.

Saya membuat file baru dengan membalikkan semua kata dalam kamus, mengurutkannya, dan kemudian membalikkannya lagi. Hasilnya adalah daftar kata yang diurutkan dari kanan ke kiri.

Jadi jika Anda mencari sebuah kata, di sebelah kata itu akan ada kata-kata dengan akhiran yang sama. Jadi mudah untuk membuat puisi kecil!

Anda benar-benar dapat menghibur diri sendiri ketika Anda melihat apa yang berirama dengan apa.

Mike Dunlavey
sumber
13

Saya telah menjadi coder / developer / sysadmin selama ~ 10 tahun dan saya tidak ingat pernah membutuhkan pembalikan string dalam situasi kehidupan nyata.

Satu-satunya kasus penggunaan langsung yang dapat saya pikirkan adalah konversi basis angka: dilakukan secara naif, prosedur mengembalikan string yang terbalik. Namun, dengan sedikit matematika, Anda dapat menghitung di muka jumlah ruang yang dibutuhkan, sehingga Anda dapat mulai mengisi buffer dari akhir.

zvrba
sumber
1
Mungkin sedikit matematika lebih mahal daripada membalikkan string, jadi setelah melakukan benchmark pada platform Anda (ARM, MIPS, x86) Anda mungkin menggunakan string terbalik. Mungkin.
Zan Lynx
Anda dapat mengisi buffer dari ujung dan gunakan memmoveuntuk memulai ketika selesai. Mungkin lebih murah daripada menghitung log (n) / log (basis) untuk menghitung jumlah digit yang diperlukan.
Patrick Schlüter
12
public bool IsPalindrome(string toCheck)
{
    return toCheck == toCheck.Reverse();
}
Scott Whitlock
sumber
1
Yap - kami sebenarnya memiliki penyaringan wawancara di mana kandidat menulis pemeriksa palindrom dan sebagian besar melakukan ini. Namun, saya seperti itu lebih baik ketika calon iterate dari 0ke n/2dan membandingkan karakter di ujung.
Nicole
@Renesis: Anda juga dapat melakukan: mengatur p mulai string, q akhir string, while ( (*p == *q) && (p <= q) {p++; q--} return p > q;dalam bahasa C dan pointer lainnya.
Michael K
4
Saya kira sementara "pemeriksa palindrom" tidak terlalu berguna, "tulis pemeriksa palindrom" setidaknya memiliki tujuan.
clockworkgeek
2
Dalam sebuah wawancara, mereka meminta saya untuk membalik string dan mereka berkata "ingat ini tidak ada string. Reverse (). Jadi saya hanya mengubah string ke array karakter dan melakukan Array. Revers
Jack Marchetti
Itu adalah penggunaan niche yang cantik dan bukan yang biasanya Anda katakan akan layak termasuk dalam bahasa / perpustakaan!
Dan Diplo
8

Wawancara!

Membalik string (di tempat atau tidak) adalah pertanyaan wawancara yang sangat umum untuk pengetahuan pemrograman dasar. Bahasa yang tidak memiliki fungsi bawaan ini akan sulit untuk diwawancarai. Calon sebenarnya harus tahu sesuatu. 1


1: Ini adalah jawaban yang tidak jelas.

Josh K.
sumber
6

Saya telah melihat situasi di mana aplikasi desktop berbicara dengan perangkat yang disematkan dan secara terus-menerus mengganti byte-order endianness, dan data dipindahkan sebagai string. Itu saja untuk saya.

Saya tidak akan menggunakan string untuk aplikasi itu tetapi hanya seperti itu .....

Apa namanya
sumber
+1 untuk jawaban ini. Setidaknya ini adalah contoh praktis walaupun saya juga akan melakukannya dengan cara lain, mungkin dengan memilih tipe primitif yang berbeda enddian.
clockworkgeek
5
<span style="unicode-bidi: bidi-override; direction:rtl;">
    <?php echo strrev($emailaddress); ?>
</span>

Bukan solusi terbaik untuk mengaburkan alamat email, karena ketika Anda menambahkannya ke clipboard, itu masih terbalik. Dan, jika menjadi populer, itu akan segera terdeteksi oleh bot pengeruk email.

Tetap saja, sudah disarankan .

Nicole
sumber
1
Dan kebingungan paling populer yang digunakan hanya diberi satu kalimat dalam seluruh artikel ... Pengkodean sebagai gambar.
clockworkgeek
1
@ Clockworkgeek, ini mungkin yang populer tapi IMHO itu yang terburuk dari solusi efektif - tidak super mudah untuk dihasilkan, tidak tertanam dalam HTML (kecepatan, penyimpanan gambar, beban server), terlihat tidak pada tempatnya, tidak dapat ditata dengan CSS, dan pengalaman pengguna yang buruk yang sama dengan pembalikan string, karena harus mengingatnya dan mengetik ulang. Dan mungkin lebih banyak masalah yang tidak saya pikirkan.
Nicole
Anehnya, menggunakan AT dan DOT, cara termudah untuk memecahkan kode pemanen, ternyata memiliki efektivitas yang hampir sempurna dalam mencegah panen. Terkadang menjaganya tetap sederhana bukanlah ide yang buruk.
Joeri Sebrechts
5

ASCII bukan pengkodean terbaik untuk informasi genetik (Anda dapat mengemas tipe dasar ACGT sebagai 2bits). Kemas dalam array yang panjang dan Anda akan mendapatkan 32 "huruf" genetik per kata. DNA dapat diputar balik, jadi Anda harus memeriksa sepotong DNA terhadap kedua maju adalah salinan terbalik dari urutan tes. Jadi bisa membalikkan string 2bit dalam jumlah banyak bisa sangat berguna untuk berbagai macam analisis genetik.

Saya memiliki sebagai item pada patokan untuk agen mata-mata, seberapa cepat Anda bisa membalikkan bit itu lama-lama (sebenarnya array yang sangat panjang sangat lama). Metode pertukaran 2bit yang jelas pada suatu waktu jauh lebih lambat daripada metode yang kurang jelas. Ini terkait dengan beberapa algoritma rapi untuk transposisi array in place.

Tangurena: Operasi yang Anda rujuk disebut penghitungan populasi. Keinginan serupa untuk data yang dikemas sedikit mengarah dan tertinggal nol hitungan. Ada banyak hal yang benar-benar rapi yang dapat dilakukan seseorang dengan data yang dikemas sedikit. Satu operasi pada longlong adalah data paralel 64way, jadi jika Anda tahu apa yang Anda lakukan, Anda bisa mendapatkan kinerja luar biasa untuk jenis komputasi tertentu.

Omega Centauri
sumber
Topik yang menarik, bagaimana Anda membalikkan sedikit bidang?
clockworkgeek
"hanya bagaimana kamu membalikkan sedikit bidang?"
Omega Centauri
2
Salah satu pendekatan adalah pencarian tabel. Anda dapat sedikit membalikkan byte dengan menggunakan tabel. Jadi Anda bisa melakukannya pada byte indivdual. Ada juga cara untuk memindahkan beberapa bit dan sekali ... Sedikit kepintaran, dan pengorbanan (ukuran tabel versus jumlah operasi dll) dan Anda dapat mencoba untuk menyetelnya.
Omega Centauri
5

Di mana pun bekerja dengan string terbalik lebih mudah.

Bekerja dengan bilangan bulat sebagai string jauh lebih mudah jika string dibalik. Saya membangun beberapa fungsi perpustakaan untuk melakukan matematika dengan bilangan bulat besar dan menggunakan pembalikan string untuk membuat fungsi aritmatika lebih sederhana.

Memang, saya hanya menggunakannya untuk mendapatkan jawaban di Project Euler, tapi tetap saja, premis aslinya masih berlaku.

Kapak
sumber
+1. saat menggunakan representasi string angka, representasi terbalik sangat membantu. dan biasanya perpustakaan standar akan mewakili angka dalam urutan normal.
back2dos
3

Mungkin dukungan multi-bahasa berbiaya rendah, untuk bahasa yang menggunakan huruf kanan-ke-kiri (seperti bahasa Arab), alih-alih dari kiri ke kanan. Tentu saja Anda harus berhati-hati terhadap aksen karakter yang memodifikasi karakter yang tepat ...

Cyclops
sumber
2

Saya tidak tahu, mungkin seseorang memiliki kebutuhan yang membara untuk memeriksa palindrome ....

Saya tidak berpikir itu sama sekali tidak berguna, karena mungkin ada situasi di mana seseorang perlu dapat membalikkan string.

Malam gelap
sumber
Pertanyaan selanjutnya adalah kapan Anda perlu memeriksa palindrom di dunia nyata? Sekali lagi, saya hanya pernah melihat orang peduli pada pelajaran algoritma.
clockworkgeek
seperti ini misalnya: jimsabo.com/palindrome.html
Darknight
Saya pikir mungkin ada kegunaan lain, tapi itu spesifik domain. Misalnya jika pencarian string dioptimalkan untuk pencarian maju dan Anda ingin melakukan beberapa pencarian untuk kejadian terakhir, Anda mungkin ingin membalikkannya terlebih dahulu. Ini akan menjadi optimasi, dan tidak boleh dilakukan kecuali ada kasus yang terbukti. Saya bisa membayangkan sebuah algoritma untuk menghasilkan hash dari nilai string yang ingin menggunakan ujung ekor, mungkin terbalik, jika itu terjadi untuk memberikan karakteristik hashing yang lebih baik.
Scott Whitlock
2

Dalam pemrosesan & parsing bahasa alami, terkadang lebih mudah untuk mencari string dari akhir hingga awal. String terbalik akan berguna untuk debugging, atau sebagai cara alternatif untuk menulis loop (membalikkan string dan kemudian loop dari indeks 0 ke n-1).

Juga beberapa bahasa dituliskan dari kanan ke kiri, sehingga pembalikan string dapat digunakan untuk itu jika Anda berada di lingkungan yang tidak mengenali bahasa LTR / RTL.

String (dalam beberapa bahasa) adalah larik karakter, tetapi bisa juga berupa gaji atau modifikasi inventaris. Dalam satu lingkaran bergerak melintasi ini, Anda mungkin melakukan beberapa perhitungan yang harus sama terlepas dari apa urutan Anda memprosesnya. Tes unit kromulen sempurna akan memeriksa untuk melihat apakah mereka perhitungan berlaku sama maju atau mundur. Ini mungkin jelas sepele untuk ditambahkan, mungkin tidak untuk operasi yang lebih buram lainnya.

MatthewMartin
sumber
1

Untuk penyusun?

Ini lucu, tetapi sebagian besar simbol dalam bahasa akan dimulai dengan pola umum. Saya tidak berbicara tentang Notasi Hongaria di sini, tetapi jika Anda berpikir tentang namespace / kelas, maka banyak simbol akan berbagi awalan yang sama .

myproject::SomeClass::GetFoo
myproject::SomeClass::GetBar

Masalahnya adalah, ketika melakukan pencarian biner, awalan umum adalah hal terburuk yang bisa Anda dapatkan, karena Anda akhirnya akan membandingkan awalan tersebut berulang kali.

Di sisi lain, jika Anda melihat string ke belakang, Anda akan melihat lebih banyak entropi! Dan tiba-tiba pencarian biner (lebih dari Trie) menjadi jauh lebih kuat!

Itu selalu menyadap saya bahwa nama C ++ hancur (oleh gcc) tidak terbalik untuk menempatkan namespace TERAKHIR :)

Matthieu M.
sumber
0

Saya membalik nomor telepon dan string tertentu untuk pencarian dari waktu ke waktu

Mengenakan
sumber
0

Satu-satunya waktu saya dapat mengingat melihat pembalikan string yang digunakan adalah fungsi yang saya lihat sebelumnya yang menggunakannya saat mem-parsing nama file, untuk memastikan bahwa '.' itu ditemukan dalam nama file sebenarnya adalah titik terakhir yang memisahkan nama file dari ekstensi. yaitu, parsing nama file seperti data.2010.12.08.dat, Anda akan membalikkan string, menemukan titik pertama, kurangi posisi itu dari akhir string asli, dan ambil substring tersebut. Saya tidak mengatakan itu cara optimal untuk melakukannya, tetapi itulah yang dilakukannya. Mungkin di powerbuilder, di mana penggunaan fungsi aneh seperti itu biasa untuk mengatasi berbagai masalah yang tidak jelas.

GrandmasterB
sumber
0

Satu-satunya aplikasi worl nyata yang saya lihat menggunakan strrev adalah untuk menyimpan kata sandi pengguna 'tidak dapat dibaca' dalam basis data ...

Tapi saya bisa ingat ada pola di C untuk menggunakan strrev, mungkin saya akan membuatnya nanti.


sumber