Διαδρομές
/
Pharo
Pharo
/
Ασκήσεις
/
Αντιστροφή συμβολοσειράς
Αντιστροφή συμβολοσειράς

Αντιστροφή συμβολοσειράς

Εύκολο

Εισαγωγή

Η αντιστροφή συμβολοσειρών (το διάβασμά τους δηλαδή από τα δεξιά προς τα αριστερά, αντί από τα αριστερά προς τα δεξιά) είναι μια εργασία πολύ πιο συχνή στον προγραμματισμό απ' ό,τι θα περίμενε κανείς.

Για παράδειγμα, στη βιοπληροφορική, η αντιστροφή της ακολουθίας συμβολοσειρών DNA ή RNA είναι συχνά σημαντική για διάφορες αναλύσεις, όπως η εύρεση συμπληρωματικών κλώνων ή ο εντοπισμός παλινδρομικών ακολουθιών με βιολογική σημασία.

Οδηγίες

Η αποστολή σου είναι να αντιστρέψεις μια δεδομένη συμβολοσειρά.

Μερικά παραδείγματα:

  • Μετέτρεψε το "stressed" σε "desserts".
  • Μετέτρεψε το "strops" σε "sports".
  • Μετέτρεψε το "racecar" σε "racecar".

Αν και υπάρχουν οι μέθοδοι #reversed και #reverseDo: για συμβολοσειρές, μπορείς να βρεις μόνος σου πώς να το κάνεις αυτό χρησιμοποιώντας επανάληψη σε χαρακτήρες και ροές σε πιο χαμηλό επίπεδο;

Για να σε βοηθήσει να περιηγηθείς στον κώδικα, το Pharo διαθέτει ένα έξυπνο εργαλείο εύρεσης κώδικα. Πάτησε Shift-Enter για να το ενεργοποιήσεις.

ΣΗΜΕΙΩΣΗ: Έχουμε ακολουθήσει τη σύμβαση του Exercism και ονομάζουμε τη λύση ReverseString, ωστόσο ένα πιο Smalltalk όνομα θα ήταν StringReverser.

Η Smalltalk και οι συμβολοσειρές

Όσον αφορά τις συμβολοσειρές, υπάρχουν μερικές προφανείς μικρές λεπτομέρειες, όπως τα διπλά εισαγωγικά για τα σχόλια, τα απλά εισαγωγικά για τις συμβολοσειρές και μια ειδική σύνταξη για τους χαρακτήρες (π.χ. $x για τον χαρακτήρα "x"), που μπορεί να σε μπερδέψουν στην πρώτη ανάγνωση, καθώς οι συμβάσεις διαφέρουν από αυτές που χρησιμοποιούν άλλες γλώσσες.

Υπάρχει επίσης η έννοια του συμβόλου, δηλαδή μιας συμβολοσειράς που είναι μοναδική σε όλη τη μνήμη· όταν κατασκευάζεται (συνήθως σε χρόνο μεταγλώττισης), γίνεται μια αναζήτηση στη μνήμη για να διαπιστωθεί αν υπάρχει κάποια άλλη όμοιά της, και χρησιμοποιείται μόνο η αρχική. Το σκεπτικό δεν είναι μόνο η εξοικονόμηση μνήμης αλλά και η σημαντική επιτάχυνση κατά τη σύγκριση συμβόλων.

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

Υπάρχουν επίσης πολύ λίγα κόμματα στα προγράμματα Smalltalk, επειδή δεν παίζουν κανέναν συντακτικό ρόλο. Γι' αυτό τα literals των πινάκων, για παράδειγμα, δεν έχουν κόμματα· π.χ. #(1 2 3 4 5) Ωστόσο, το κόμμα είναι ένας τελεστής από μόνο του και θα το προσέξεις όταν συνενώνεις δύο συμβολοσειρές· π.χ. 'string1', 'string2'

Τέλος, αξίζει να ξέρεις ότι οι συμβολοσειρές και οι χαρακτήρες είναι διακριτές κλάσεις. Μια συμβολοσειρά είναι μια συλλογή από χαρακτήρες. Αυτό μπορεί να σε αιφνιδιάσει όταν επαναλαμβάνεις πάνω σε συμβολοσειρές, καθώς μπορεί να καταλήξεις να δίνεις χαρακτήρες σε μια μέθοδο που περιμένει συμβολοσειρές. Δες το παρακάτω...

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

Η Smalltalk και οι ροές

Οι ροές είναι χρήσιμες για διαδοχική ανάγνωση και εγγραφή. Κάνουν τον κώδικα πιο καθαρό, αποφεύγοντας την ανάγκη να αυξάνεις μια θέση. Οι ροές λειτουργούν σε οποιαδήποτε συλλογή.

stream := WriteStream on: String new.
stream nextPut: $h ; nextPutAll: 'ell' ; nextPut: $o.
stream contents inspect
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Pharo Exercism

Έτοιμος να ξεκινήσεις την άσκηση Αντιστροφή συμβολοσειράς;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Pharo με 50 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.

Αναλυτική ματιά στο Αντιστροφή συμβολοσειράς!

Εξερεύνησε 14 διαφορετικούς τρόπους για να αντιστρέψεις μια συμβολοσειρά, καλύπτοντας μια σειρά θεμάτων όπως σημεία κώδικα Unicode, γραφήματα, δεσμεύσεις μνήμης στη στοίβα έναντι του σωρού και δείκτες. Χαλάρωσε και απόλαυσε 45 λεπτά μάθησης με τον Jeremy και τον Erik.