Kurzusok
/
Pharo
Pharo
/
Feladatok
/
String megfordítása
String megfordítása

String megfordítása

Könnyű

Bevezetés

A stringek megfordítása (jobbról balra olvasni őket, nem pedig balról jobbra) meglepően gyakori feladat a programozásban.

A bioinformatikában például gyakran fontos a DNS- vagy RNS-stringek sorrendjének megfordítása a különféle elemzésekhez, például a komplementer szálak megkereséséhez vagy a biológiai jelentőségű palindrom szekvenciák felismeréséhez.

Utasítások

A feladatod, hogy megfordíts egy adott stringet.

Néhány példa:

  • A "stressed"-ból "desserts" lesz.
  • A "strops"-ból "sports" lesz.
  • A "racecar"-ból "racecar" lesz.

Bár a Stringekhez vannak #reversed és #reverseDo: metódusok, ki tudod találni, hogyan csinálhatod meg ezt magad, alacsonyabb szintű karakteriterációval és streamekkel?

Hogy könnyebben böngészhess a kódban, a Pharo-ban van egy remek kódkereső eszköz. A Shift-Enter lenyomásával aktiválhatod.

MEGJEGYZÉS: Az Exercism konvencióját követve a megoldás neve ReverseString, egy Smalltalkosabb név viszont a StringReverser lenne.

A Smalltalk és a Stringek

A stringek kapcsán van néhány nyilvánvaló apróság, például hogy a megjegyzésekhez kettős idézőjelet, a stringekhez szimpla idézőjelet használunk, a karaktereknek pedig külön szintaxisuk van (pl. $x az „x” karakterre), és ezek első olvasásra összezavarhatnak, mert a konvenciók eltérnek a más nyelvekben használtaktól.

Szó van továbbá a szimbólum fogalmáról is: ez egy olyan string, amely a teljes memóriában egyedi; azaz amikor létrehozzák (tipikusan fordításkor), egy memóriakeresés indul annak megállapítására, hogy létezik-e hozzá hasonló; és csak az eredetit használják. Az indok nemcsak a memóriamegtakarítás, hanem a szimbólumok összehasonlításakor elért jelentős gyorsulás is.

"this is a comment"
'this is a string'
#'this is a symbol'
#thisIsASymbolToo

A Smalltalk programokban ráadásul nagyon kevés vessző van, mert azoknak nincs szintaktikai szerepük. Ezért például a tömbliterálokban sincs vessző; pl. #(1 2 3 4 5) A vessző viszont önálló operátor, és akkor találkozol vele, amikor két stringet fűzöl össze; pl. 'string1', 'string2'

Végezetül érdemes tudni, hogy a String és a Character külön osztályok. A String a Characterek gyűjteménye. Ez váratlanul érhet, amikor stringeken iterálsz, mert könnyen előfordulhat, hogy karaktereket adsz át egy olyan metódusnak, amely stringeket vár. Vegyük például a következőt:

(('hello' at: 2) = $e) inspect.
(('hello' at: 2) = 'e') inspect.

A Smalltalk és a streamek

A streamek hasznosak a szekvenciális olvasáshoz és íráshoz. Tisztábbá teszik a kódot, mert nincs szükség egy index léptetésére. A streamek bármilyen kollekción működnek.

stream := WriteStream on: String new.
stream nextPut: $h ; nextPutAll: 'ell' ; nextPut: $o.
stream contents inspect
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Pharo Exercism

Készen állsz elkezdeni a(z) String megfordítása feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Pharo nyelvet 50 feladat segítségével, valódi emberi mentorálással, mindez ingyen.

Mélyelemzés: String megfordítása!

Fedezz fel 14 különböző módot egy string megfordítására, olyan témák érintésével, mint a Unicode-kódpontok, a grafémaegységek, a verem- és kupacallokáció, valamint a mutatók. Dőlj hátra, és élvezd a 45 perces tanulást Jeremy és Erik társaságában!