Συγκριτικό διάγραμμα
Βάση σύγκρισης | Πίνακας χαρακτήρων | Σειρά |
---|---|---|
Βασικός | Ο πίνακας χαρακτήρων είναι η συλλογή μεταβλητών τύπου χαρακτήρα χαρακτήρων. | Το String είναι κλάση και οι μεταβλητές της συμβολοσειράς είναι το αντικείμενο της κλάσης "string". |
Σύνταξη | char array_name [μέγεθος]; | συμβολοσειρά string_name; |
Ευρετηρίαση | Ένας ατομικός χαρακτήρας σε έναν πίνακα χαρακτήρων μπορεί να προσπελαστεί από το δείκτη του σε πίνακα. | Σε συμβολοσειρά ο συγκεκριμένος χαρακτήρας μπορεί να προσεγγιστεί με τη συνάρτηση "string_name.charAt (ευρετήριο)". |
Τύπος δεδομένων | Μια διάταξη χαρακτήρων δεν καθορίζει έναν τύπο δεδομένων. | Μια συμβολοσειρά ορίζει έναν τύπο δεδομένων στη C ++. |
Χειριστές | Οι χειριστές της C ++ δεν μπορούν να εφαρμοστούν στον πίνακα χαρακτήρων. | Μπορείτε να εφαρμόσετε τυπικό χειριστή C ++ στη συμβολοσειρά. |
Οριο | Τα όρια των συστοιχιών υπερβαίνουν εύκολα. | Τα όρια δεν θα ξεπεράσουν. |
Πρόσβαση | Γρήγορη πρόσβαση. | Αργή πρόσβαση. |
Ορισμός του πίνακα χαρακτήρων
Ο πίνακας χαρακτήρων είναι μια συλλογή των μεταβλητών τύπου "char". μπορεί να είναι μια μονοδιάστατη συστοιχία ή μια δισδιάστατη συστοιχία. Ονομάζεται επίσης "string terminated null". Ο πίνακας χαρακτήρων είναι μια ακολουθία χαρακτήρων που είναι αποθηκευμένες σε διαδοχικές διευθύνσεις μνήμης. Σε μια συστοιχία χαρακτήρων, ένας συγκεκριμένος χαρακτήρας μπορεί να προσπελαστεί από τον δείκτη του. Ένας "χαρακτήρας Null" τερματίζει τη συστοιχία χαρακτήρων ".
Ας πάρουμε ένα παράδειγμα του πίνακα χαρακτήρων: -
char όνομα [] = {'Α', 'j', 'a', 'y', '\ 0'}; ή char όνομα [] = "Ajay"?
Εδώ, το "char" είναι ένας τύπος δεδομένων χαρακτήρων, το "όνομα" είναι ένα μεταβλητό όνομα του πίνακα χαρακτήρων. Είχα δείξει δύο τρόπους για την αρχικοποίηση της συστοιχίας χαρακτήρων. Στην πρώτη μέθοδο, το μηδέν αναφέρεται ρητά και στη δεύτερη μέθοδο, ο μεταγλωττιστής εισάγει αυτόματα το μηδέν.
Το τέλος της συμβολοσειράς είναι πάντα ένας μηδενικός χαρακτήρας. είναι ο τερματισμός του χαρακτήρα του πίνακα χαρακτήρων. Ο πίνακας χαρακτήρων δεν είναι ενσωματωμένος τύπος δεδομένων. δημιουργούμε πίνακα χαρακτήρων δηλώνοντάς την. Δεν μπορείτε να εφαρμόσετε τους τυπικούς τελεστές σε έναν πίνακα χαρακτήρων. Για να λειτουργήσει ο πίνακας χαρακτήρων, υπάρχουν ορισμένες ενσωματωμένες λειτουργίες όπως (strlen (), strlwr (), strupr (), strcat ()). Καθώς οι τυπικοί χειριστές δεν μπορούν να εφαρμοστούν σε μια συστοιχία χαρακτήρων, δεν μπορούν να συμμετάσχουν σε καμία έκφραση.
Μπορεί επίσης να δημιουργηθεί ο δείκτης χαρακτήρων σε έναν πίνακα χαρακτήρων.
Ας το καταλάβουμε με ένα παράδειγμα.
char s1 [] = "Γεια σας"; char s2 [] = "Sir"; s1 = s1 + s2. // δεν μπορούν να εφαρμοστούν χειριστές σφάλματος s2 = s1; // error σφάλμα χαρακτήρων char * s = "πρωί"; char * p; p = s; // εκτελεί
Στο παραπάνω παράδειγμα είχαμε δηλώσει δύο σειρές χαρακτήρων s1, s2 και δύο δείκτες χαρακτήρων s και p. Οι σειρές χαρακτήρων s1 και s2 αρχικοποιούνται, μπορούμε να δούμε ότι ούτε ο χειριστής προσθήκης (+) ούτε ο χειριστής εκχώρησης δουλεύουν στη συστοιχία χαρακτήρων. Αλλά ένας δείκτης χαρακτήρων μπορεί να εκχωρηθεί σε άλλο δείκτη χαρακτήρα.
Θυμηθείτε ότι μόλις αρχικοποιηθεί ο πίνακας χαρακτήρων, δεν μπορεί να αρχικοποιηθεί πάλι σε άλλο σύνολο χαρακτήρων. Η πρόσβαση σε μια διάταξη χαρακτήρων ή σε μια μηδενική τερματισμένη συμβολοσειρά είναι γρήγορη σε σύγκριση με τη συμβολοσειρά της C ++.
Ορισμός της συμβολοσειράς
Μια συμβολοσειρά δεν είναι ένας ενσωματωμένος τύπος δεδομένων C ++. Είναι ένα αντικείμενο κλάσης τύπου "string". Όπως και στην C ++ δημιουργώντας μια κλάση είναι ακριβώς όπως τη δημιουργία ενός "τύπου". Η κλάση "string" είναι μέρος της βιβλιοθήκης C ++. Κατέχει το σύνολο του πίνακα χαρακτήρων ή χαρακτήρα ως σύνολο. Υπάρχουν τρεις λόγοι πίσω από την ανάπτυξη μιας τυπικής κλάσης συμβολοσειρών.
- Πρώτον είναι η "συνέπεια", οι συστοιχίες χαρακτήρων δεν είναι αυτοτελείς τύποι δεδομένων.
- Δεύτερον είναι "ευκολία", δεν μπορείτε να χρησιμοποιήσετε τυπικούς χειριστές σε έναν πίνακα χαρακτήρων.
- Τρίτον είναι "ασφάλεια", τα όρια των συστοιχιών υπερβαίνουν εύκολα.
Ας καταλάβουμε τις συμβολοσειρές με ένα παράδειγμα.
string s1; s1 = "Γεια σας"; Σειρά s2 ("Καλημέρα"); συμβολοσειρά s3 = "Hennery"; string s4;
Στην παραπάνω δήλωση δηλώνονται τέσσερις μεταβλητές στοιχειοσειράς ή αντικείμενα (s1, s2, s3, s4). Στην παραπάνω δήλωση, είχα δείξει τρεις τρόπους αρχικοποίησης της συμβολοσειράς. Η συμβολοσειρά s1 δηλώνεται και αρχικοποιείται ξεχωριστά. Η συμβολοσειρά s2 αρχικοποιείται από τον κατασκευαστή της κλάσης "String". Η συμβολοσειρά s3 αρχικοποιείται κατά τη στιγμή της δήλωσής της ως κανονικός τύπος δεδομένων. Μπορούμε να εφαρμόσουμε τον πρότυπο χειριστή στις μεταβλητές string.
s4 = s1; // ανάθεση ενός αντικειμένου στοιχειοσειράς σε άλλα s4 = s1 + s2; // προσθέτοντας δύο συμβολοσειρές και αποθηκεύοντας το αποτέλεσμα σε τρίτο συμβολοσειρά αν (s3> s2) // συγκρίνοντας δύο χορδές string s5 (s1). δημιουργώντας ένα νέο αντικείμενο συμβολοσειράς χρησιμοποιώντας το υπάρχον αντικείμενο συμβολοσειράς
Στον παραπάνω κώδικα, οι διάφοροι χειριστές εφαρμόζονται σε μια συμβολοσειρά και εκτελούνται διάφορες λειτουργίες. Η πρώτη πρόταση αντιγράφει ένα αντικείμενο συμβολοσειράς σε άλλο αντικείμενο συμβολοσειράς. Στη δεύτερη δήλωση, δύο συμβολοσειρές συνενώνονται και αποθηκεύονται σε μια τρίτη συμβολοσειρά. Στην τρίτη δήλωση συγκρίνονται δύο συμβολοσειρές. Στην τέταρτη πρόταση δημιουργείται ένα νέο αντικείμενο συμβολοσειράς χρησιμοποιώντας το ήδη υπάρχον αντικείμενο συμβολοσειράς.
Η πρόσβαση στη συμβολοσειρά είναι αργή σε σύγκριση με μια συστοιχία χαρακτήρων ή μια συμβολοσειρά με τερματισμό null.
Βασικές διαφορές μεταξύ της διάταξης χαρακτήρων και της συμβολοσειράς
- Μια συστοιχία χαρακτήρων είναι μια συλλογή μεταβλητών που έχουν χαρακτήρες τύπου datatype. Η συμβολοσειρά είναι μια κλάση που έχει δημιουργηθεί για να δηλώσει συμβολοσειρά.
- Χρησιμοποιώντας την τιμή ευρετηρίου μπορείτε να αποκτήσετε πρόσβαση σε έναν χαρακτήρα από έναν πίνακα χαρακτήρων. Από την άλλη πλευρά, εάν θέλετε να αποκτήσετε πρόσβαση σε ένα συγκεκριμένο χαρακτήρα σε μια συμβολοσειρά, μπορείτε να την αποκτήσετε με βάση τη συνάρτηση string's_name.charAt (ευρετήριο).
- Δεδομένου ότι ένας πίνακας δεν είναι τύπος δεδομένων, ο χαρακτήρας δεν είναι επίσης τύπος δεδομένων. Από την άλλη πλευρά, το String είναι μια κλάση πράξη ως τύπος αναφοράς ως εκ τούτου, μπορεί να λεχθεί String είναι ένας τύπος δεδομένων.
- Δεν μπορείτε να εφαρμόσετε κανέναν χειριστή σε έναν πίνακα χαρακτήρων, ενώ μπορείτε να εφαρμόσετε τους τελεστές στο String.
- Η ύπαρξη μιας συστοιχίας χαρακτήρων πίνακα έχει σταθερό μήκος και τα όριά της μπορούν εύκολα να ξεπεραστούν. Όπου το String δεν έχει όρια.
- Τα στοιχεία συστοιχιών αποθηκεύονται σε μια συνεχή τοποθεσία μνήμης, με αποτέλεσμα να μπορούν να προσπελαστούν ταχύτερα από τη μεταβλητή συμβολοσειράς.
Συμπέρασμα:
Η αδυναμία λειτουργίας σε πίνακα χαρακτήρων αύξησε την ανάπτυξη της τυπικής κλάσης συμβολοσειρών.