34

--- Οδηγός C# --- Χορδές

Όσον αφορά τον κανονικό προγραμματισμό, συμβολοσειρά τύπο δεδομένων συμβολοσειράςείναι ένα από τα πιο σημαντικά στην C#. Αυτός ο τύπος ορίζει και υποστηρίζει συμβολοσειρές χαρακτήρων. Σε πολλές άλλες γλώσσες προγραμματισμού, μια συμβολοσειρά είναι μια σειρά χαρακτήρων. Και στην C#, οι συμβολοσειρές είναι αντικείμενα. Επομένως, ο τύπος συμβολοσειράς είναι ένας από τους τύπους αναφοράς.

Κατασκευή σειρών

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

String str = "Παράδειγμα συμβολοσειράς";

Σε αυτήν την περίπτωση, η μεταβλητή str αρχικοποιείται με την ακολουθία χαρακτήρων "Παράδειγμα συμβολοσειράς". Ένα αντικείμενο συμβολοσειράς τύπου μπορεί επίσης να δημιουργηθεί από έναν πίνακα τύπου char. Για παράδειγμα:

Char chararray = ("e", "x", "a", "m", "p", "l", "e"); string str = νέα συμβολοσειρά (chararray);

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

Εμμονή χορδής

Παραδόξως, τα περιεχόμενα ενός αντικειμένου τύπου string δεν μπορούν να τροποποιηθούν. Αυτό σημαίνει ότι από τη στιγμή που έχει δημιουργηθεί μια ακολουθία χαρακτήρων, δεν μπορεί να αλλάξει. Αλλά αυτός ο περιορισμός συμβάλλει σε μια πιο αποτελεσματική εφαρμογή συμβολοσειρών χαρακτήρων. Επομένως, αυτό, με την πρώτη ματιά, ένα προφανές μειονέκτημα μετατρέπεται στην πραγματικότητα σε πλεονέκτημα. Έτσι, εάν χρειάζεστε μια συμβολοσειρά ως παραλλαγή μιας υπάρχουσας συμβολοσειράς, τότε για το σκοπό αυτό θα πρέπει να δημιουργήσετε μια νέα συμβολοσειρά που θα περιέχει όλες τις απαραίτητες αλλαγές. Και δεδομένου ότι τα αχρησιμοποίητα αντικείμενα χορδών συλλέγονται αυτόματα στα "σκουπίδια", τότε δεν χρειάζεται καν να ανησυχείτε για την τύχη των περιττών χορδών.

Ωστόσο, πρέπει να τονιστεί ότι οι μεταβλητές αναφοράς συμβολοσειράς (δηλαδή, αντικείμενα τύπου string) υπόκεινται σε αλλαγές και επομένως μπορούν να αναφέρονται σε άλλο αντικείμενο. Αλλά το περιεχόμενο του ίδιου του αντικειμένου συμβολοσειράς δεν αλλάζει μετά τη δημιουργία του.

Εξετάστε ένα παράδειγμα:

Static void addNewString() ( string s = "This is my stroke"; s = "This is new stroke"; )

Ας μεταγλωττίσουμε την εφαρμογή και ας φορτώσουμε το συγκρότημα που προκύπτει στο βοηθητικό πρόγραμμα ildasm.exe. Το σχήμα δείχνει τον κώδικα CIL που θα δημιουργηθεί για τη μέθοδο void addNewString():

Παρατηρήστε τις πολλαπλές κλήσεις στο opcode ldstr (φόρτωση συμβολοσειράς). Αυτός ο κωδικός ldstr στο CIL προκαλεί τη φόρτωση ενός νέου αντικειμένου συμβολοσειράς στον διαχειριζόμενο σωρό. Ως αποτέλεσμα, το προηγούμενο αντικείμενο που περιείχε την τιμή "This is my stroke" θα συλλεχθεί τελικά σκουπίδια.

Εργασία με χορδές

Στην τάξη Σύστημα.Χορδήπαρέχεται ένα σύνολο μεθόδων για τον προσδιορισμό του μήκους των δεδομένων χαρακτήρων, την αναζήτηση μιας υποσυμβολοσειράς στην τρέχουσα συμβολοσειρά, τη μετατροπή χαρακτήρων από κεφαλαίοπρος τα κάτω και αντίστροφα κ.λπ. Θα εξετάσουμε αυτή την τάξη με περισσότερες λεπτομέρειες στη συνέχεια.

Πεδίο, δείκτης και ιδιότητα της κλάσης String

Η κλάση String έχει ένα μόνο πεδίο που ορίζεται:

Δημόσια στατική συμβολοσειρά μόνο για ανάγνωση Κενό.

Το πεδίο Empty υποδηλώνει μια κενή συμβολοσειρά, δηλ. μια συμβολοσειρά που δεν περιέχει χαρακτήρες. Αυτό διαφέρει από μια κενή αναφορά συμβολοσειράς, η οποία γίνεται απλώς σε ένα ανύπαρκτο αντικείμενο.

Επιπλέον, η κλάση String ορίζει έναν ενιαίο δείκτη μόνο για ανάγνωση:

Δημόσιος χαρακτηρισμός αυτού (λήψη; )

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

Τέλος, η κλάση String ορίζει μια ιδιότητα μόνο για ανάγνωση:

Μήκος δημόσιου χαρακτήρα (λήψη;)

Η ιδιότητα Length επιστρέφει τον αριθμό των χαρακτήρων σε μια συμβολοσειρά. Το παρακάτω παράδειγμα δείχνει τη χρήση ενός δείκτη και την ιδιότητα Length:

Χρήση του συστήματος. Παράδειγμα κλάσης ( static void Main() ( string str = " απλή χορδή"; // Λάβετε το μήκος της συμβολοσειράς και τον 6ο χαρακτήρα της συμβολοσειράς χρησιμοποιώντας το δείκτη Console.WriteLine("Το μήκος της συμβολοσειράς είναι (0), ο 6ος χαρακτήρας είναι "(1)"", str.Length, str); ))

Τελεστές κλάσης συμβολοσειρών

Η κλάση String υπερφορτώνει τους ακόλουθους δύο τελεστές: == και !=. Ο τελεστής == χρησιμοποιείται για τον έλεγχο δύο συμβολοσειρών χαρακτήρων για ισότητα. Όταν ο τελεστής == εφαρμόζεται σε αναφορές αντικειμένων, συνήθως ελέγχει αν και οι δύο αναφορές είναι στο ίδιο αντικείμενο. Και όταν ο τελεστής == εφαρμόζεται σε αναφορές αντικειμένων τύπου String, τα περιεχόμενα των ίδιων των συμβολοσειρών συγκρίνονται για ισότητα. Το ίδιο ισχύει και για τον τελεστή !=. Όταν εφαρμόζεται σε αναφορές αντικειμένων τύπου String, τα περιεχόμενα των ίδιων των συμβολοσειρών συγκρίνονται για ανισότητα. Ταυτόχρονα, άλλοι σχεσιακόι τελεστές, συμπεριλαμβανομένου του =, συγκρίνουν αναφορές σε αντικείμενα τύπου String με τον ίδιο τρόπο όπως και σε αντικείμενα άλλων τύπων. Και για να ελέγξετε αν μια συμβολοσειρά είναι μεγαλύτερη από μια άλλη, θα πρέπει να καλέσετε τη μέθοδο Compare() που ορίζεται στην κλάση String.

Όπως θα γίνει σαφές αργότερα, πολλά είδη συγκρίσεων συμβολοσειρών χαρακτήρων χρησιμοποιούν πολιτισμικές πληροφορίες. Αλλά αυτό δεν ισχύει για τους τελεστές == και !=. Άλλωστε, απλώς συγκρίνουν τις τακτικές τιμές των χαρακτήρων σε συμβολοσειρές. (Με άλλα λόγια, συγκρίνουν τιμές δυαδικών χαρακτήρων που δεν έχουν τροποποιηθεί από πολιτισμικά πρότυπα, π.χ. τοπικές ρυθμίσεις.) Επομένως, αυτοί οι τελεστές εκτελούν συγκρίσεις συμβολοσειρών με τρόπο χωρίς διάκριση πεζών-κεφαλαίων και χωρίς διάκριση πολιτισμού.

Μέθοδοι κλάσης συμβολοσειρών

Ο παρακάτω πίνακας παραθέτει μερικές από τις πιο ενδιαφέρουσες μεθόδους αυτής της κλάσης, ομαδοποιημένες κατά σκοπό:

Μέθοδοι συμβολοσειρών
Μέθοδος Δομή και υπερφορτωμένες εκδόσεις Σκοπός
Σύγκριση χορδών
Συγκρίνω() δημόσια στατική int Σύγκριση (strA string, string strB)

Δημόσια στατική int Σύγκριση (strA strA, string strB, bool ignoreCase)

Δημόσια στατική int Σύγκριση (strA string, string strB, StringComparison CompareType)

Δημόσια στατική int Σύγκριση (strA string, string strB, bool ignoreCase, CultureInfo Culture)

Στατική μέθοδος, συγκρίνει τη συμβολοσειρά strA με τη συμβολοσειρά strB. Επιστρέφει θετικό εάν το strA είναι μεγαλύτερο από το strB. αρνητικό εάν το strA είναι μικρότερο από το strB. και μηδέν αν οι συμβολοσειρές strA και strB είναι ίσες. Η σύγκριση είναι πεζών-κεφαλαίων και πολιτισμικά ευαίσθητη.

Εάν η παράμετρος ignoreCase λάβει booleanαλήθεια, η σύγκριση δεν λαμβάνει υπόψη τις διαφορές μεταξύ κεφαλαίων και πεζών γραμμάτων. Διαφορετικά, αυτές οι διαφορές λαμβάνονται υπόψη.

Η παράμετρος σύγκρισηΤύπος καθορίζει τον συγκεκριμένο τρόπο με τον οποίο συγκρίνονται οι συμβολοσειρές. Η κλάση CultureInfo ορίζεται στον χώρο ονομάτων System.Globalization.

δημόσια στατική int Σύγκριση (strA string, int indexA, string strB, int indexB, int length)

Δημόσια στατική int Σύγκριση (strA strA, int indexA, string strB, int indexB, int length, bool ignoreCase)

Δημόσια στατική int Σύγκριση (strA strA, int indexA, string strB, int indexB, int length, StringComparison comparisonType)

Δημόσια στατική int Σύγκριση (strA string, int indexA, string strB, int indexB, int length, bool ignoreCase, CultureInfo Culture)

Συγκρίνει μέρη των χορδών strA και strB. Η σύγκριση ξεκινά με τα στοιχεία συμβολοσειράς strA και strB και περιλαμβάνει τον αριθμό των χαρακτήρων που καθορίζεται από την παράμετρο μήκος. Η μέθοδος επιστρέφει μια θετική τιμή εάν μέρος του strA είναι μεγαλύτερο από μέρος του strB. αρνητική τιμή εάν μέρος του strA είναι μικρότερο από μέρος του strB. και μηδέν εάν τα συγκριτικά μέρη των συμβολοσειρών strA και strB είναι ίσα. Η σύγκριση είναι πεζών-κεφαλαίων και πολιτισμικά ευαίσθητη.

compareOrdinal() δημόσια στατική int CompareOrdinal(strA strA, string strB)

Δημόσια στατική int CompareOrdinal(strA string, int indexA, string strB, int indexB, int count)

Κάνει το ίδιο με τη μέθοδο Compare(), αλλά χωρίς να λαμβάνει υπόψη τις τοπικές ρυθμίσεις

CompareTo() public int CompareTo (τιμή αντικειμένου)

Συγκρίνει τη συμβολοσειρά κλήσης με την παράσταση συμβολοσειράς του αντικειμένου τιμής. Επιστρέφει μια θετική τιμή εάν η καλούσα συμβολοσειρά είναι μεγαλύτερη από την τιμή της συμβολοσειράς. μια αρνητική τιμή εάν η καλούσα συμβολοσειρά είναι μικρότερη από τη συμβολοσειρά τιμής. και μηδέν αν οι συγκριτικές συμβολοσειρές είναι ίσες

δημόσια int CompareTo(strB string)

Συγκρίνει τη συμβολοσειρά κλήσης με το strB

Equals() δημόσια παράκαμψη bool Ισούται (αντικείμενο αντικ.)

Επιστρέφει το boolean true εάν η καλούσα συμβολοσειρά περιέχει την ίδια ακολουθία χαρακτήρων με την παράσταση συμβολοσειράς του obj. Πραγματοποιεί μια τακτική σύγκριση, με διάκριση πεζών-κεφαλαίων, αλλά πολιτισμικά μη ευαίσθητη

δημόσιο bool Ίσο (τιμή συμβολοσειράς)

Public bool Ισούται (τιμή συμβολοσειράς, Τύπος σύγκρισης συμβολοσειράς)

Επιστρέφει τη δυαδική τιμή true εάν η καλούσα συμβολοσειρά περιέχει την ίδια ακολουθία χαρακτήρων με την τιμή της συμβολοσειράς. Πραγματοποιείται μια τακτική σύγκριση, με διάκριση πεζών-κεφαλαίων, αλλά πολιτισμικά μη ευαίσθητη. Η παράμετρος σύγκρισηΤύπος ορίζει έναν συγκεκριμένο τρόπο σύγκρισης συμβολοσειρών

δημόσιο στατικό bool Ισούται (συμβολοσειρά a, συμβολοσειρά b)

Δημόσιο στατικό bool Ισούται (συμβολοσειρά a, συμβολοσειρά b, Τύπος σύγκρισης συμβολοσειράς)

Επιστρέφει το boolean true αν η συμβολοσειρά a περιέχει την ίδια ακολουθία χαρακτήρων με τη συμβολοσειρά b. Πραγματοποιείται μια τακτική σύγκριση, με διάκριση πεζών-κεφαλαίων, αλλά πολιτισμικά μη ευαίσθητη. Η παράμετρος σύγκρισηΤύπος ορίζει έναν συγκεκριμένο τρόπο σύγκρισης συμβολοσειρών

Συνένωση (σύνδεση) χορδών
Concat() δημόσια στατική συμβολοσειρά Concat (string str0, string str1);

δημόσια στατική συμβολοσειρά Concat (παράμετροι τιμές συμβολοσειράς);

Συνδυάζει ξεχωριστά στιγμιότυπα συμβολοσειράς σε μια ενιαία συμβολοσειρά (σύνδεση)
Αναζήτηση σε μια συμβολοσειρά
Περιέχει() δημόσιο bool Περιέχει (τιμή συμβολοσειράς) Μια μέθοδος που σας επιτρέπει να προσδιορίσετε εάν μια συμβολοσειρά περιέχει μια συγκεκριμένη υποσυμβολοσειρά (τιμή)
Ξεκινάει με() δημόσιο bool StartsWith (τιμή συμβολοσειράς)

Public bool StartsWith (τιμή συμβολοσειράς, Τύπος σύγκρισης συμβολοσειράς)

Επιστρέφει το boolean true αν η καλούσα συμβολοσειρά ξεκινά με την υποσυμβολοσειρά τιμής. Διαφορετικά, επιστρέφεται η δυαδική τιμή false. Η παράμετρος σύγκρισηΤύπος καθορίζει τον τρόπο με τον οποίο θα πραγματοποιηθεί η αναζήτηση.

Τελειώνει με() δημόσιο bool EndsWith (τιμή συμβολοσειράς)

Public bool EndsWith (τιμή συμβολοσειράς, Τύπος σύγκρισης συμβολοσειράς)

Επιστρέφει το boolean true αν η καλούσα συμβολοσειρά τελειώνει με την υποσυμβολοσειρά τιμής. Διαφορετικά, επιστρέφει την τιμή boolean false. Η παράμετρος σύγκρισηΤύπος καθορίζει μια συγκεκριμένη μέθοδο αναζήτησης

IndexOf() public int IndexOf(τιμή χαρακτήρων)

Public int IndexOf(τιμή συμβολοσειράς)

Βρίσκει την πρώτη εμφάνιση μιας δεδομένης υποσυμβολοσειράς ή χαρακτήρα σε μια συμβολοσειρά. Εάν ο χαρακτήρας ή η υποσυμβολοσειρά που αναζητάτε δεν βρεθεί, τότε επιστρέφεται -1.

public int IndexOf(τιμή χαρακτήρων, int startIndex)

Public int IndexOf (τιμή συμβολοσειράς, int startIndex)

Public int IndexOf (τιμή χαρακτήρων, int startIndex, int count)

Public int IndexOf (τιμή συμβολοσειράς, int startIndex, int count)

Επιστρέφει το ευρετήριο της πρώτης εμφάνισης του χαρακτήρα ή της τιμής υποσυμβολοσειράς στη συμβολοσειρά κλήσης. Η αναζήτηση ξεκινά από το στοιχείο που καθορίζεται στο ευρετήριο startIndex και καλύπτει τον αριθμό των στοιχείων που καθορίζονται από την παράμετρο count (εάν έχει καθοριστεί). Η μέθοδος επιστρέφει -1 εάν ο χαρακτήρας ή η δευτερεύουσα συμβολοσειρά που αναζητήθηκε δεν βρεθεί

LastIndexOf() Οι υπερφορτωμένες εκδόσεις είναι παρόμοιες με τη μέθοδο IndexOf().

Ίδιο με το IndexOf, αλλά βρίσκει την τελευταία εμφάνιση ενός χαρακτήρα ή υποσυμβολοσειράς αντί για την πρώτη

IndexOfAny() public int IndexOfAny(χαρακτηρίζεται οποιοδήποτεOf)

Δημόσιο int IndexOfAny(χαρακτηριστικό anyOf, int startIndex)

Δημόσιο int IndexOfAny(χαρακτηριστικό anyOf, int startIndex, int count)

Επιστρέφει το ευρετήριο της πρώτης εμφάνισης οποιουδήποτε χαρακτήρα στον πίνακα anyOf που βρίσκεται στη συμβολοσειρά κλήσης. Η αναζήτηση ξεκινά από το στοιχείο που καθορίζεται από το ευρετήριο startIndex και καλύπτει τον αριθμό των στοιχείων που καθορίζονται από την παράμετρο count (εάν υπάρχει). Η μέθοδος επιστρέφει -1 εάν δεν βρεθεί αντιστοιχία για κανέναν από τους χαρακτήρες στον πίνακα anyOf. Η έρευνα γίνεται με τακτικό τρόπο

LastIndexOfAny Οι υπερφορτωμένες εκδόσεις είναι παρόμοιες με τη μέθοδο IndexOfAny().

Επιστρέφει το ευρετήριο της τελευταίας εμφάνισης οποιουδήποτε χαρακτήρα στον πίνακα anyOf που βρίσκεται στη συμβολοσειρά κλήσης

Διάσπαση και συνένωση χορδών
Διαίρεση Διαίρεση δημόσιας συμβολοσειράς (params διαχωριστικό χαρακτήρων)

Διαίρεση δημόσιας συμβολοσειράς (params διαχωριστικό χαρακτήρων, int count)

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

Η πρώτη μορφή της μεθόδου Split() χωρίζει τη συμβολοσειρά κλήσης στα συστατικά μέρη της. Το αποτέλεσμα είναι ένας πίνακας που περιέχει τις υποσυμβολοσειρές που ανακτήθηκαν από την καλούσα συμβολοσειρά. Οι χαρακτήρες που οριοθετούν αυτές τις υποσυμβολοσειρές περνούν στον διαχωριστικό πίνακα. Αν ο διαχωριστικός πίνακας είναι κενός ή αναφέρεται σε κενή συμβολοσειρά, τότε χρησιμοποιείται ένα κενό ως διαχωριστικό υποσυμβολοσειράς. Και στη δεύτερη μορφή αυτή τη μέθοδοεπιστρέφει τον αριθμό των υποσυμβολοσειρών που καθορίζονται από την παράμετρο count.

Δημόσια συμβολοσειρά Split (params διαχωριστικό χαρακτήρων, επιλογές StringSplitOptions)

Public string Split (διαχωριστικό συμβολοσειράς, επιλογές StringSplitOptions)

Διαίρεση δημόσιας συμβολοσειράς (παράμετροι διαχωριστικού χαρακτήρων, πλήθος int, επιλογές StringSplitOptions)

Διαίρεση δημόσιας συμβολοσειράς (διαχωριστικό συμβολοσειρών, πλήθος int, επιλογές StringSplitOptions)

Οι δύο πρώτες μορφές της μεθόδου Split() χωρίζουν τη συμβολοσειρά κλήσης σε μέρη και επιστρέφουν έναν πίνακα που περιέχει τις υποσυμβολοσειρές που λαμβάνονται από τη συμβολοσειρά κλήσης. Οι χαρακτήρες που διαχωρίζουν αυτές τις υποσυμβολοσειρές μεταβιβάζονται στον διαχωριστικό πίνακα. Εάν ο διαχωριστικός πίνακας είναι κενός, τότε χρησιμοποιείται ένα κενό ως διαχωριστικό. Και στην τρίτη και τέταρτη μορφή αυτής της μεθόδου, ο αριθμός των σειρών επιστρέφεται, περιορισμένος από την παράμετρο count.

Αλλά σε όλες τις μορφές, η παράμετρος επιλογών καθορίζει έναν συγκεκριμένο τρόπο χειρισμού των κενών συμβολοσειρών, οι οποίες δημιουργούνται όταν δύο οριοθέτες είναι δίπλα. Η απαρίθμηση StringSplitOptions ορίζει μόνο δύο τιμές: ΚανέναςΚαι RemoveEmptyEntries. Εάν η παράμετρος επιλογών είναι Καμία, τότε οι κενές συμβολοσειρές περιλαμβάνονται στο τελικό αποτέλεσμα του διαχωρισμού. πρωτότυπη χορδή. Και αν η παράμετρος επιλογών έχει οριστεί σε RemoveEmptyEntries, τότε οι κενές συμβολοσειρές εξαιρούνται από το τελικό αποτέλεσμα του διαχωρισμού της αρχικής συμβολοσειράς.

Συμμετοχή() δημόσια στατική συμβολοσειρά Join (διαχωριστικό συμβολοσειράς, τιμή συμβολοσειράς)

Δημόσια στατική συμβολοσειρά Join (διαχωριστικό συμβολοσειράς, τιμή συμβολοσειράς, int startIndex, int count)

Κατασκευάζει μια νέα συμβολοσειρά συνδυάζοντας τα περιεχόμενα ενός πίνακα συμβολοσειρών.

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

Γραμμές πλήρωσης και κοπής
τακτοποίηση() δημόσια συμβολοσειρά Trim()

Περικοπή δημόσιας συμβολοσειράς (params char trimChars)

Μια μέθοδος που σας επιτρέπει να αφαιρέσετε όλες τις εμφανίσεις ενός καθορισμένου συνόλου χαρακτήρων από την αρχή και το τέλος της τρέχουσας συμβολοσειράς.

Η πρώτη μορφή της μεθόδου Trim() αφαιρεί τα κύρια και τα τελικά κενά από τη συμβολοσειρά κλήσης. Και η δεύτερη μορφή αυτής της μεθόδου καταργεί τις εμφανίσεις προπορευόμενου και τελικού στη συμβολοσειρά χαρακτήρων κλήσης από τον πίνακα trimChars. Και οι δύο μορφές επιστρέφουν τη συμβολοσειρά που προκύπτει.

PadLeft() δημόσια συμβολοσειρά PadLeft (int totalWidth)

Δημόσια συμβολοσειρά PadLeft (int totalWidth, char paddingChar)

Σας επιτρέπει να συμπληρώσετε τη συμβολοσειρά με χαρακτήρες στα αριστερά.

Η πρώτη μορφή της μεθόδου PadLeft() εισάγει κενά στην αριστερή πλευρά της συμβολοσειράς κλήσης έτσι ώστε το συνολικό μήκος της να γίνει ίση με την τιμήτην παράμετρο totalWidth. Στη δεύτερη μορφή αυτής της μεθόδου, οι χαρακτήρες που συμβολίζονται με την παράμετρο paddingChar εισάγονται στην αριστερή πλευρά της συμβολοσειράς κλήσης, έτσι ώστε το συνολικό μήκος της να ισούται με την τιμή της παραμέτρου totalWidth. Και οι δύο μορφές επιστρέφουν τη συμβολοσειρά που προκύπτει. Εάν η τιμή της παραμέτρου totalWidth είναι μικρότερη από το μήκος της καλούσας συμβολοσειράς, τότε επιστρέφεται ένα αντίγραφο της μη τροποποιημένης συμβολοσειράς κλήσης.

PadRight() Παρόμοιο με το PadLeft()

Σας επιτρέπει να συμπληρώσετε τη συμβολοσειρά με χαρακτήρες στα δεξιά.

Εισαγωγή, διαγραφή και αντικατάσταση σειρών
Εισάγετε() δημόσια συμβολοσειρά Εισαγωγή (int startIndex, τιμή συμβολοσειράς)

Χρησιμοποιείται για την εισαγωγή μιας συμβολοσειράς σε μια άλλη, όπου η τιμή είναι η συμβολοσειρά που θα εισαχθεί στη συμβολοσειρά κλήσης στο ευρετήριο startIndex. Η μέθοδος επιστρέφει τη συμβολοσειρά που προκύπτει.

Αφαιρώ() δημόσια συμβολοσειρά Αφαίρεση (int startIndex)

Δημόσια συμβολοσειρά Αφαίρεση (int startIndex, int count)

Χρησιμοποιείται για την αφαίρεση μέρους μιας χορδής. Στην πρώτη μορφή της μεθόδου Remove(), η αφαίρεση εκτελείται ξεκινώντας από τη θέση που καθορίζεται από το ευρετήριο startIndex και συνεχίζοντας μέχρι το τέλος της συμβολοσειράς. Και στη δεύτερη μορφή αυτής της μεθόδου, ο αριθμός των χαρακτήρων που καθορίζεται από την παράμετρο count αφαιρείται από τη συμβολοσειρά, ξεκινώντας από τη θέση που καθορίζεται από το ευρετήριο startIndex.

Αντικαθιστώ() δημόσια συμβολοσειρά Αντικατάσταση (char oldChar, char newChar)

Δημόσια συμβολοσειρά Αντικατάσταση (string oldValue, string newValue)

Χρησιμοποιείται για την αντικατάσταση μέρους μιας συμβολοσειράς. Η πρώτη μορφή της μεθόδου Replace() αντικαθιστά όλες τις εμφανίσεις του oldChar στη συμβολοσειρά κλήσης με το newChar. Και στη δεύτερη μορφή αυτής της μεθόδου, όλες οι εμφανίσεις της συμβολοσειράς oldValue στη συμβολοσειρά κλήσης αντικαθίστανται από τη συμβολοσειρά newValue.

Αλλαγή υπόθεσης
ToUpper() δημόσια συμβολοσειρά ToUpper()

Χρησιμοποιεί κεφαλαία όλα τα γράμματα στη συμβολοσειρά κλήσης.

Να μειώσει() δημόσια συμβολοσειρά ToLower()

Κάνει όλα τα γράμματα στη συμβολοσειρά κλήσης πεζά.

Λήψη υποσυμβολοσειράς από συμβολοσειρά
Substring() δημόσια συμβολοσειρά Substring (int startIndex)

Δημόσια συμβολοσειρά Substring (int startIndex, int length)

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

Το ακόλουθο παράδειγμα προγράμματος χρησιμοποιεί αρκετές από τις παραπάνω μεθόδους:

Χρήση του συστήματος. χρησιμοποιώντας System.Collections.Generic; χρησιμοποιώντας System.Linq; χρησιμοποιώντας System.Text; namespace ConsoleApplication1 ( class Program ( static void Main(string args) ( // Συγκρίνετε τις δύο πρώτες συμβολοσειρές string s1 = "This is a string"; string s2 = "This is text, this is a string"; if (String.CompareOrdinal (s1, s2) != 0) Console.WriteLine("Οι συμβολοσειρές s1 και s2 δεν είναι ίσες"); if (String.Compare(s1, 0, s2, 13, 10, true) == 0) Console.WriteLine( "Ωστόσο, περιέχουν το ίδιο κείμενο"); // Συνένωση συμβολοσειρών Console.WriteLine(String.Concat("\n" + "One, two ","tree, four")); // Αναζήτηση στη συμβολοσειρά // Πρώτη εμφάνιση του substring if (s2. IndexOf("this") != -1) Console.WriteLine("Η λέξη \"this\" βρέθηκε στη γραμμή, είναι "+ "at: (0) position", s2. IndexOf("this")); / / Τελευταία εμφάνιση της υποσυμβολοσειράς if (s2.LastIndexOf("this") != -1) Console.WriteLine("Η τελευταία εμφάνιση του \"this\" είναι " + "στο ( 0) position", s2.LastIndexOf("this" )); // Αναζήτηση από τον πίνακα χαρακτήρων char myCh = ("S","x","t"); if (s2.IndexOfAny(myCh) != -1) Console.WriteLine("Ένας από τους χαρακτήρες από τον πίνακα ch "+" που βρέθηκε στο τρέχον τρέχουσα γραμμή στη θέση (0)", s2.IndexOfAny(myCh)); // Προσδιορίστε εάν η συμβολοσειρά ξεκινά με τη δεδομένη υποσυμβολοσειρά if (s2.StartsWith("this is text") == true) Console.WriteLine("Substring βρέθηκε!"); // Προσδιορίστε εάν η συμβολοσειρά περιέχει μια δευτερεύουσα συμβολοσειρά // χρησιμοποιώντας το παράδειγμα προσδιορισμού της συμβολοσειράς του λειτουργικού συστήματος myOS = Environment.OSVersion.ToString(); if (myOS.Contains("NT 5.1")) Console.WriteLine("Your OS Σύστημα Windows XP"); αλλιώς εάν (myOS.Contains("NT 6.1")) Console.WriteLine("Your λειτουργικό σύστημα Windows 7"); Console.ReadLine(); ) ) )

Λίγα λόγια για τη σύγκριση συμβολοσειρών στο C#

Από όλες τις λειτουργίες επεξεργασίας συμβολοσειράς χαρακτήρων, είναι ίσως η πιο συχνά εκτελούμενη σύγκριση μιας συμβολοσειράς με μια άλλη. Πριν εξετάσετε οποιαδήποτε μέθοδο σύγκρισης συμβολοσειρών, θα πρέπει να τονιστεί το εξής: η σύγκριση συμβολοσειρών μπορεί να γίνει στο .NET Framework με δύο κύριους τρόπους:

    Πρώτον, η σύγκριση μπορεί να αντικατοπτρίζει τα έθιμα και τους κανόνες ενός συγκεκριμένου πολιτιστικού περιβάλλοντος, που είναι συχνά πολιτιστικές ρυθμίσεις που ισχύουν όταν εκτελείται ένα πρόγραμμα. Αυτή είναι η τυπική συμπεριφορά για ορισμένες, αν και όχι όλες, μεθόδους σύγκρισης.

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

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

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

Η κλάση String παρέχει μια ποικιλία μεθόδων σύγκρισης συμβολοσειρών, οι οποίες παρατίθενται στον παραπάνω πίνακα. Η πιο ευέλικτη από αυτές είναι η μέθοδος Compare(). Σας επιτρέπει να συγκρίνετε δύο συμβολοσειρές εν όλω ή εν μέρει, με διάκριση πεζών-κεφαλαίων ή πεζών-κεφαλαίων, με τρόπο σύγκρισης που καθορίζεται από την παράμετρο τύπου Σύγκριση συμβολοσειρών, καθώς και πολιτιστικές πληροφορίες που παρέχονται από την παράμετρο τύπου CultureInfo.

Αυτές οι υπερφορτώσεις της μεθόδου Compare() που δεν περιέχουν παράμετρο τύπου StringComparison εκτελούν σύγκριση συμβολοσειρών χαρακτήρων με ευαισθησία σε πεζά και πεζά και πολιτισμικά στοιχεία. Και σε αυτές τις υπερφορτωμένες παραλλαγές που δεν περιέχουν παράμετρο τύπου CultureInfo, οι πληροφορίες πολιτισμού καθορίζονται από το τρέχον περιβάλλον χρόνου εκτέλεσης.

Ο τύπος StringComparison είναι μια απαρίθμηση που καθορίζει τις τιμές που εμφανίζονται στον παρακάτω πίνακα. Χρησιμοποιώντας αυτές τις τιμές, μπορείτε να οργανώσετε συγκρίσεις συμβολοσειρών που ταιριάζουν στις ανάγκες της εφαρμογής σας. Επομένως, η προσθήκη μιας παραμέτρου τύπου StringComparison επεκτείνει τις δυνατότητες της μεθόδου Compare() και άλλων μεθόδων σύγκρισης όπως η Equals(). Καθιστά επίσης δυνατό τον ξεκάθαρο προσδιορισμό του τρόπου σύγκρισης των συμβολοσειρών.

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

Τιμές που ορίζονται στον αριθμό StringComparison
Εννοια Περιγραφή
CurrentCulture Η σύγκριση συμβολοσειρών γίνεται χρησιμοποιώντας τις τρέχουσες ρυθμίσεις καλλιέργειας
CurrentCultureIgnoreCase Η σύγκριση συμβολοσειρών πραγματοποιείται χρησιμοποιώντας τις τρέχουσες ρυθμίσεις καλλιέργειας, αλλά δεν γίνεται διάκριση πεζών-κεφαλαίων
InvariantCulture Η σύγκριση συμβολοσειρών γίνεται χρησιμοποιώντας αμετάβλητα, δηλ. καθολικά δεδομένα για το πολιτιστικό περιβάλλον
InvariantCultureIgnoreCase Η σύγκριση συμβολοσειρών γίνεται χρησιμοποιώντας αμετάβλητα, δηλ. καθολικά πολιτιστικά δεδομένα και χωρίς διάκριση πεζών-κεφαλαίων
Τακτικός Η σύγκριση συμβολοσειρών πραγματοποιείται χρησιμοποιώντας τις τακτικές τιμές των χαρακτήρων στη συμβολοσειρά. Στην περίπτωση αυτή μπορεί να παραβιαστεί η λεξικογραφική σειρά και συµβάσειςπου γίνονται αποδεκτά σε ένα συγκεκριμένο πολιτιστικό περιβάλλον αγνοούνται
OrdinalIgnoreCase Η σύγκριση συμβολοσειρών πραγματοποιείται χρησιμοποιώντας τις τακτικές τιμές των χαρακτήρων στη συμβολοσειρά, αλλά χωρίς διάκριση πεζών-κεφαλαίων

Σε κάθε περίπτωση, η μέθοδος Compare() επιστρέφει αρνητική τιμή εάν η πρώτη συμβολοσειρά που συγκρίνεται είναι μικρότερη από τη δεύτερη. μια θετική τιμή εάν η πρώτη συμβολοσειρά που συγκρίνεται είναι μεγαλύτερη από τη δεύτερη. και τέλος μηδέν εάν και οι δύο συγκρινόμενες συμβολοσειρές είναι ίσες. Αν και η μέθοδος Compare() επιστρέφει μηδέν εάν οι συμβολοσειρές που συγκρίνονται είναι ίσες, είναι γενικά καλύτερο να χρησιμοποιήσετε τη μέθοδο Equals() ή τον τελεστή == για να προσδιορίσετε εάν οι συμβολοσειρές χαρακτήρων είναι ίσες.

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

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

Το παρακάτω πρόγραμμα δείχνει τη χρήση των μεθόδων Compare(), Equals(), CompareOrdinal() και των τελεστών == και != για τη σύγκριση συμβολοσειρών χαρακτήρων. Σημειώστε ότι τα δύο πρώτα παραδείγματα σύγκρισης καταδεικνύουν ξεκάθαρα τις διαφορές μεταξύ των συγκρίσεων των πολιτιστικά ευαίσθητων συμβολοσειρών και των αγγλικών τακτικών συγκρίσεων:

Χρήση του συστήματος. class Παράδειγμα ( static void Main() ( string str1 = "alpha"; string str2 = "Alpha"; string str3 = "Beta"; string str4 = "alpha"; string str5 = "alpha, beta"; int αποτέλεσμα; / / Αρχικά, δείξτε τις διαφορές μεταξύ της σύγκρισης συμβολοσειρών ευαίσθητων σε πολιτισμό και του αποτελέσματος τακτικής σύγκρισης = String.Compare(str1, str2, StringComparison.CurrentCulture); Console.Write("Σύγκριση συμβολοσειρών ευαίσθητων σε πολιτισμό: "); if (αποτέλεσμα 0 ) Κονσόλα .WriteLine(str1 + " είναι μεγαλύτερο από " + str2); else Console.WriteLine(str1 + "είναι " + str2); αποτέλεσμα = String.Compare(str1, str2, StringComparison.Ordinal); Console.Write("Τακτική σύγκριση γραμμές: "); εάν (αποτέλεσμα 0) Console.WriteLine(str1 + " είναι μεγαλύτερο από " + str2); αλλιώς Console.WriteLine(str1 + "ισούται με " + str4); // Χρησιμοποιήστε το αποτέλεσμα της μεθόδου CompareOrdinal() = String.CompareOrdinal( str1, str2); Console.Write("Σύγκριση συμβολοσειρών χρησιμοποιώντας CompareOrdinal():\n"); if (αποτέλεσμα 0) Console.WriteLine(str1 + " μεγαλύτερο από " + str2); αλλιώς Console.WriteLine (στρ 1 + "ισούται με " + str4); Console.WriteLine(); // Προσδιορίστε την ισότητα συμβολοσειρών χρησιμοποιώντας τον τελεστή == // Αυτή είναι μια τακτική σύγκριση συμβολοσειρών χαρακτήρων εάν (str1 == str4) Console.WriteLine(str1 + " == " + str4); // Ανίχνευση ανισότητας γραμμής χρησιμοποιώντας τον τελεστή != if(str1 != str3) Console.WriteLine(str1 + " != " + str3); if(str1 != str2) Console.WriteLine(str1 + " != " + str2); Console.WriteLine(); // Εκτελέστε μια τακτική σύγκριση συμβολοσειρών χωρίς διάκριση πεζών-κεφαλαίων χρησιμοποιώντας τη μέθοδο Equals() if(String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)) Console.WriteLine("Σύγκριση συμβολοσειρών χρησιμοποιώντας τη μέθοδο Equals() με την παράμετρο " + "OrdinalIgnoreCase : \n" + str1 + " ισούται με " + str2); Console.WriteLine(); // Συγκρίνετε μέρη συμβολοσειρών if(String.Compare(str2, 0, str5, 0, 3, StringComparison.CurrentCulture) > 0) ( Console.WriteLine("Σύγκριση συμβολοσειρών με βάση την τρέχουσα κουλτούρα:" + "\n3 πρώτοι χαρακτήρες της συμβολοσειράς " + str2 + " είναι μεγαλύτερος από τους 3 πρώτους χαρακτήρες της συμβολοσειράς " + str5); ) ) )

Η εκτέλεση αυτού του προγράμματος παράγει το ακόλουθο αποτέλεσμα:

Δεν υπάρχει ξεχωριστός τύπος δεδομένων "string of characters" στη γλώσσα C. Η εργασία με συμβολοσειρές υλοποιείται με τη χρήση μονοδιάστατων πινάκων του τύπου char, δηλ. μια συμβολοσειρά χαρακτήρων είναι ένας μονοδιάστατος πίνακας χαρακτήρων που τερματίζεται από ένα null byte.

Ένα μηδενικό byte είναι ένα byte, κάθε bit του οποίου είναι ίσο με μηδέν, ενώ η σταθερά χαρακτήρα ´\0´ (ένας τερματιστής γραμμής ή ένας τερματιστής μηδενός) ορίζεται για το μηδενικό byte. Επομένως, εάν μια συμβολοσειρά πρέπει να περιέχει k χαρακτήρες, τότε τα στοιχεία k+1 πρέπει να προσδιορίζονται στην περιγραφή του πίνακα.

Για παράδειγμα, char a; - σημαίνει ότι η συμβολοσειρά μπορεί να περιέχει έξι χαρακτήρες και το τελευταίο byte είναι δεσμευμένο για μηδέν.

Μια σταθερά συμβολοσειράς είναι ένα σύνολο χαρακτήρων που περικλείονται μέσα διπλά εισαγωγικά. Για παράδειγμα:

char S="Εργασία με χορδές";

Δεν χρειάζεται να προσδιορίσετε ρητά τον χαρακτήρα «\0» στο τέλος μιας σταθεράς συμβολοσειράς.

Όταν εργάζεστε με συμβολοσειρές, είναι βολικό να χρησιμοποιείτε δείκτες, για παράδειγμα:

x = "BSUIR";

x = (i>0); "θετικό": (δηλ<0)? "отрицательное":"нулевое";

Θυμηθείτε ότι δύο τυπικές συναρτήσεις χρησιμοποιούνται συνήθως για την εισαγωγή συμβολοσειρών:

scanf()- εισάγει τιμές για μεταβλητές συμβολοσειράς με έναν προσδιοριστή εισόδου %μικρόπριν από την εμφάνιση του πρώτου χαρακτήρα "space" (ο χαρακτήρας "&" δεν χρειάζεται να καθοριστεί πριν από το αναγνωριστικό δεδομένων συμβολοσειράς).

παίρνει ()- Η εισαγωγή μιας γραμμής με κενά εντός αυτής της γραμμής ολοκληρώνεται με το πάτημα του πλήκτρου ENTER.

Και οι δύο συναρτήσεις τερματίζουν αυτόματα τη συμβολοσειρά με ένα null byte.

Οι γραμμές εξάγονται από τις συναρτήσεις printf() ή puts() μέχρι το πρώτο null byte ('\0'):

printf()δεν μετακινεί τον κέρσορα μετά την έξοδο στην αρχή μιας νέας γραμμής.

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

Για παράδειγμα:

printf(" Εισαγάγετε μια συμβολοσειρά χωρίς κενά: \n");

scanf("%s",Str);

puts("Εισαγάγετε μια συμβολοσειρά");

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

λειτουργία int strlen(char *S) επιστρέφει το μήκος της συμβολοσειράς (τον αριθμό των χαρακτήρων στη συμβολοσειρά), αγνοώντας το τερματικό null byte.

char *S1=”Minsk!\0”, S2=”BSUIR-Hurrah!”;

printf(“ %d, %d .”, strlen(S1), strlen(S2));

Το αποτέλεσμα αυτής της ενότητας του προγράμματος:

λειτουργία int strcpy(char *S1, char *S2) - αντιγράφει τα περιεχόμενα της συμβολοσειράς S2 στη συμβολοσειρά S1.

Λειτουργία strcat(char *S1, char *S2) - ενώνει τη συμβολοσειρά S2 στη συμβολοσειρά S1 και την τοποθετεί στον πίνακα όπου ήταν η συμβολοσειρά S1, ενώ η συμβολοσειρά S2 δεν αλλάζει. Το null byte που τερματίστηκε η συμβολοσειρά S1 αντικαθίσταται από τον πρώτο χαρακτήρα της συμβολοσειράς S2.

λειτουργία int strcmp(char *S1, char *S2) συγκρίνει τις συμβολοσειρές S1 και S2 και επιστρέφει την τιμή<0, если S10 εάν S1>S2; =0 αν οι συμβολοσειρές είναι ίσες, δηλ. περιέχει τον ίδιο αριθμό πανομοιότυπων χαρακτήρων.

Συναρτήσεις για τη μετατροπή μιας συμβολοσειράς S σε αριθμό:

Ακέραιος: int atoi(οστεοφυλάκιο);

Long Integer: long ατόλη(οστεοφυλάκιο);

Πραγματικό: διπλό ατοφ(οστεοφυλάκιο);

σε περίπτωση σφάλματος, αυτές οι συναρτήσεις επιστρέφουν 0.

Συναρτήσεις για τη μετατροπή ενός αριθμού V σε συμβολοσειρά S.

»Η αξιόπιστη εταιρεία SEO στην Ινδία μπορεί να αυξήσει τα έσοδα των μικρών επιχειρήσεων

Το 80% των χρηστών αναζητούν στο Google και σε άλλες μηχανές αναζήτησης πριν κάνουν μια αγορά και πάνω από το 50% των ερωτημάτων που δημιουργούνται μέσω των μηχανών αναζήτησης μετατρέπονται. Αυτά τα δύο στατιστικά στοιχεία αποδεικνύουν τη σημασία του Search Engine Optimization. Υπάρχουν πολλά τέτοια στατιστικά και γεγονότα που κάνουν ένα ξεκάθαρο σημείο: κάθε επιχείρηση μικρής, μεσαίας ή μεγάλης κλίμακας χρειάζεται επαγγελματικές υπηρεσίες SEO. Οι μικρές επιχειρήσεις και οι νεοσύστατες επιχειρήσεις αντιμετωπίζουν συχνά προβλήματα προϋπολογισμού. Μπορούν να λάβουν βοήθεια από οποιοδήποτε αξιόπιστο πρακτορείο SEO από την Ινδία για να λάβουν την καλύτερη υπηρεσία SEO στον προϋπολογισμό τους για να αυξήσουν τα έσοδά τους.
Η αναζήτηση έχει μεγάλη επίδραση στο μυαλό των καταναλωτών. Σύμφωνα με τα διάφορα στατιστικά στοιχεία που μοιράζονται σημαντικοί ειδικοί στη βελτιστοποίηση μηχανών αναζήτησης σε διάφορους εξουσιοδοτημένους ιστότοπους όπως Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot κ.λπ. Το SEO συλλαμβάνει την πλειοψηφία των πελατών. Επίσης, οι δυνητικοί πελάτες που προέρχονται από τα αποτελέσματα οργανικής αναζήτησης έχουν υψηλότερο ποσοστό μετατροπών. Αυτά τα στατιστικά στοιχεία και η συμπεριφορά των καταναλωτών καθιστούν πιο ξεκάθαρο ότι η καλύτερη υπηρεσία SEO δεν είναι πολυτέλεια, αλλά αναγκαιότητα για κάθε επιχείρηση.
Για να παρακάμψει τον ανταγωνισμό και να αυξήσει την επιχειρηματική ανάπτυξη, κάθε οργανισμός πρέπει να χρησιμοποιεί τις υπηρεσίες βελτιστοποίησης μηχανών αναζήτησης. Οι μεγάλες μάρκες μπορούν να επενδύσουν αρκετά χρήματα για την εξειδικευμένη υπηρεσία SEO που προσφέρει μια κορυφαία εταιρεία SEO ή ένας ειδικός SEO, αλλά οι ιδιοκτήτες μικρών επιχειρήσεων συχνά συμβιβάζονται με την ποιότητα αυτής της υπηρεσίας λόγω μικρότερου προϋπολογισμού. Είναι δύσκολο γεγονός ότι οι μικρές επιχειρήσεις και οι νεοσύστατες επιχειρήσεις καταλήγουν να αφήνουν τις ευκαιρίες που μπορούν να δημιουργηθούν με την επαγγελματική υπηρεσία SEO ή να χρησιμοποιούν μια φθηνή υπηρεσία SEO που δεν αποφέρει θετικά αποτελέσματα.
Οι ιδιοκτήτες μικρών επιχειρήσεων και οι νεοσύστατες επιχειρήσεις μπορούν να επωφεληθούν από επαγγελματικές υπηρεσίες SEO ακόμη και στον περιορισμένο προϋπολογισμό. Η καλύτερη λύση είναι η εύρεση μιας αξιόπιστης εταιρείας SEO με έδρα την Ινδία. Στην Ινδία, υπάρχουν πολλοί ειδικοί SEO που συνεργάζονται με την εταιρεία ψηφιακού μάρκετινγκ και προσφέρουν τις καλύτερες υπηρεσίες στον κλάδο. Μπορούν να σας παρέχουν τις απαιτούμενες υπηρεσίες SEO στον προϋπολογισμό σας. Οι μισθοί μπορούν να αποτελέσουν αντικείμενο διαπραγμάτευσης με ένα πρακτορείο SEO στην Ινδία για να λάβετε καλύτερες υπηρεσίες σε χαμηλότερες τιμές. Ωστόσο, μην πέφτετε σε φτηνή υπηρεσία SEO που χρεώνει λιγότερο και υπόσχεστε να προσφέρετε περισσότερα καθώς η τεχνογνωσία έχει το δικό της κόστος. Πρέπει να δείτε το χαρτοφυλάκιο ή να κάνετε τις σωστές ερωτήσεις πριν αναθέσετε μια εταιρεία για την επιχείρησή σας.
Οι ειδικοί SEO στην Ινδία είναι ειδικευμένοι στις βέλτιστες πρακτικές βελτιστοποίησης μηχανών αναζήτησης. Επίσης, υπάρχουν ορισμένοι ειδικοί SEO στην Ινδία, όπως ο Ash Vyas, οι οποίοι ειδικεύονται στη δημιουργία της καλύτερης στρατηγικής βελτιστοποίησης μηχανών αναζήτησης για μια επιχείρηση με δηλωμένο προϋπολογισμό. Οι επαγγελματίες SEO θα δημιουργήσουν ένα σαφές σχέδιο και θα μοιραστούν επίσης ποια μπορεί να είναι τα αναμενόμενα αποτελέσματα. Με αυτόν τον τρόπο μπορείτε να γνωρίζετε καλά την επένδυση και τις αποδόσεις σας. Αυτό βοηθά στη λήψη μιας καλύτερης επιχειρηματικής απόφασης.
Μια καλή ιδέα είναι να βρείτε και να συνάψετε σύμβαση με μια αξιόπιστη εταιρεία SEO από την Ινδία που προσφέρει τις καλύτερες υπηρεσίες SEO το συντομότερο δυνατό. Μπορείτε επίσης να ξεκινήσετε με μικρό προϋπολογισμό και περιορισμένες δραστηριότητες για να αρχίσετε να ευρετηριάζετε τις ιστοσελίδες σας και να ενισχύετε τις λέξεις-κλειδιά σας στις μηχανές αναζήτησης. Μην περιμένετε την τέλεια στιγμή ή μια μέρα που θα έχετε χιλιάδες δολάρια για να επενδύσετε στις καλύτερες υπηρεσίες SEO. Το να ξεκινήσετε νωρίς θα σας βοηθήσει να έχετε πιο γρήγορα αποτελέσματα όταν μπορείτε να προχωρήσετε επιθετικά με την προσέγγιση μάρκετινγκ. Μια αξιόπιστη εταιρεία SEO με έδρα την Ινδία θα σας βοηθήσει να καθορίσετε τα τρέχοντα και μελλοντικά σας σχέδια για να αποφέρετε καλά αποτελέσματα. Οι περισσότερες ευρετηριασμένες σελίδες ενίσχυσαν τις κατατάξεις και η αξιόπιστη επωνυμία της επιχείρησής σας με συνεχείς επαγγελματικές πρακτικές SEO θα διπλασιάσουν τα ερωτήματα, τις επιχειρήσεις και τα έσοδα. Κάθε μικρή επιχείρηση μπορεί να ξεκινήσει με διψήφια επένδυση στις επαγγελματικές υπηρεσίες SEO. Υπάρχουν πολλές εταιρείες SEO στην Ινδία που προσφέρουν χαμηλό προϋπολογισμό, αλλά προκύπτουν από προσανατολισμένες υπηρεσίες βελτιστοποίησης μηχανών αναζήτησης.

έρευνες από την εξορία

  • CraigWew

    12.04.2018

    »Η σημασία της δημιουργίας σχέσης με τον πελάτη σε ακίνητα και γενικές πωλήσεις

    Η σημασία της δημιουργίας σχέσης με τον πελάτη.
    Η δημιουργία σχέσης με τον πελάτη πρέπει να κερδίζεται και πρέπει να προσεγγίζεται ως πολύ αναπόσπαστο μέρος της διαδικασίας πωλήσεων.
    Για να κάνετε έναν πελάτη και τον εαυτό σας να σχετιστούν σε μια πραγματική βάση ένα προς ένα, περιλαμβάνει δύο πράγματα!
    Πρώτα, θα πρέπει να είστε ενήμεροι και να είστε εκεί! Δεύτερον, πρέπει να καταλάβετε ότι υπάρχουν δύο διαφορετικά στάδια που θα προκύψουν κατά τη διάρκεια αυτής της διαδικασίας.
    Α-Να είσαι εκεί-τι σημαίνει αυτό;
    o Οι περισσότεροι άνθρωποι δεν ακούν πραγματικά ένα άλλο άτομο καθώς μιλάει. Γενικά είναι τόσο απασχολημένοι με τη διατύπωση της επόμενης απάντησης ή δήλωσής τους που δεν μπορούσαν να ακούσουν πραγματικά.
    o Αν σας ακούγεται, το να είστε εκεί σημαίνει να σκάσετε και να ακούσετε!
    Β-Ποιο είναι το πρώτο ή το αρχικό στάδιο;
    o Γενικά έχετε μόνο λίγα λεπτά για να καθιερωθείτε στο μυαλό των πελατών ως κάποιος με τον οποίο θέλουν να συνεννοηθούν.
    o Όταν έχετε αμφιβολίες, είναι καλύτερο να κάνετε πρώτα ερωτήσεις που θα τους τραβήξουν έξω και θα μιλήσουν για τον εαυτό τους.
    o Είναι επίσης πάντα ασφαλές να εμφανίζεσαι ως επαγγελματίας - δεν εννοώ στωικός ή στεγνός, αλλά κάποιος που ξέρει τι κάνουν και μιλάει και κοιτάζει το κομμάτι.
    Γ-Άλλα στάδια
    o Όσο περνά ο καιρός, μέσα από τη συζήτηση και τις ερωτήσεις που θα έχουν, είτε θα εδραιώσετε την ικανότητά σας είτε όχι.
    o Να γνωρίζετε ότι πιθανότατα θα σας μετρούν για λίγο. Τα καλά νέα είναι ότι κάποια στιγμή, εάν έχετε πετύχει να δημιουργήσετε σχέσεις-θα χαλαρώσουν και μπορείτε και οι δύο να συγκεντρωθείτε στην εύρεση ή την πώληση του σπιτιού.
    Τι άλλο μπορεί να με βοηθήσει να αναπτύξω σχέσεις;
    o Προσπαθώντας να κατανοήσετε διαφορετικούς τύπους προσωπικότητας και στη συνέχεια λέγοντας και κάνοντας τις σωστές ερωτήσεις.
    o Εάν έχετε καλή σχέση (να έχετε το ίδιο μήκος κύματος με τον πελάτη), τότε η πώληση έχει ουσιαστικά τελειώσει, τώρα είναι απλώς θέμα εύρεσης του κατάλληλου σπιτιού ή συμπλήρωσης των εγγράφων καταχώρισης.
    Τι γίνεται με τις διαφορετικές προσωπικότητες
    o Δεδομένου ότι αυτό δεν είναι ένα βιβλίο για την ψυχιατρική, προς το παρόν κατανοήστε δύο βασικούς τύπους.
    o Υπάρχουν εσωστρεφείς και εξωστρεφείς άνθρωποι.
    o Γνωρίζετε τον τύπο. Σκεφτείτε τρία άτομα που γνωρίζετε ότι ταιριάζουν σε κάθε κατηγορία.
    Τι γίνεται με τη γλώσσα του σώματος και τα πρότυπα ομιλίας;
    o Εάν μιλούν γρήγορα ή αργά, προσπαθήστε να μιμηθείτε τα μοτίβα ομιλίας τους.
    o Εάν μιλάνε δυνατά ή απαλά, κάντε το ίδιο. Γέρνουν προς τα εμπρός ή προς τα πίσω;
    o Περιττό να πούμε ότι υπάρχουν πολλά βιβλία γραμμένα για αυτό το θέμα. Απλώς να γνωρίζετε ότι είναι ένας σημαντικός παράγοντας - ειδικά όταν κάθεστε σε μια αίθουσα συνεδριάσεων ή στο σπίτι κάποιου και συζητάτε μια συμφωνία 400.000 $.
    Η ανάπτυξη σχέσεων είναι μια δεξιότητα που μπορεί να μάθει και να βελτιωθεί.
    o Όλοι έχουμε βιώσει έναν πωλητή που μας πούλησε κάτι και όμως δεν νιώθαμε ότι μας πουλούσαν. Ο λόγος είναι αυτός ή αυτή, σε έκανε να νιώσεις άνετα εκεί που τους εμπιστεύτηκες.
    Πώς αναπτύσσουμε τη σχέση;
    o Χρησιμοποιήστε τα μάτια και τα αυτιά σας και κάντε ερωτήσεις. για να εξηγήσει
    o Χρησιμοποιήστε τα μάτια:
    o Κοιτάξτε το φόρεμά τους-το αυτοκίνητό τους-τα προσωπικά τους υπάρχοντα και πραγματικά εννοώ να τα κοιτάξετε και να αποκρυπτογραφήσετε τι σας λέει αυτό για αυτούς.
    o Χρησιμοποιήστε τα αυτιά:
    o Ακούστε τι λένε και κάντε ερωτήσεις για να καταλήξετε στο πραγματικό τους ΚΙΝΗΤΡΟ!
    Τώρα κατά τη διάρκεια όλης αυτής της συνομιλίας, πιθανότατα θα υπάρχουν ένα ή δύο πράγματα που θα ανακαλύψετε ότι έχετε κοινά μαζί τους. (Οικογένεια, γεωγραφικές περιοχές, ψάρεμα, κ.λπ.) Όταν συναντήσετε κοινά σημεία, ενημερώστε τους ότι είστε εξοικειωμένοι και μετά αφιερώστε ένα λεπτό για να το συζητήσετε μαζί τους.
    Ποιος είναι ο Στόχος;
    o Μόλις σας δεχτούν ως έναν από αυτούς, είστε σε θέση να έχετε πραγματικά μια εξαιρετική εμπειρία στις εκπτώσεις καθώς τώρα εργάζεστε μαζί και μετά ως ομάδα—δεν είστε πλέον ο πωλητής που βρίσκεστε τώρα σε συμβουλευτική θέση .
    o Θυμηθείτε, ο πελάτης είτε θα σας επιτρέψει είτε όχι να εισέλθετε στον κόσμο του. Εάν το καταλαβαίνετε αυτό και εργάζεστε σκληρά για να γίνετε συμπονετικοί μαζί του/της, μπορείτε να κερδίσετε μια θέση εμπιστοσύνης. Στις περισσότερες περιπτώσεις, θα τους δείτε πραγματικά να χαλαρώνουν (γλώσσα του σώματος) όταν συμβεί αυτό όταν είστε στο δρόμο.
    o Για να το καταδείξετε αυτό, έχετε κάνει ποτέ μια ομιλία και έχετε παρατηρήσει ότι καθώς συνδέεστε τελικά με ένα μέλος του ακροατηρίου, θα κουνήσει καταφατικά το κεφάλι. Αυτά τα πράγματα μπορεί να φαίνονται τετριμμένα, αλλά δεν είναι.
    Κλείνοντας, εάν μπορείτε να κερδίσετε την εμπιστοσύνη των πελατών, η πώληση ενός προϊόντος ή μιας υπηρεσίας είναι πολύ πιο εύκολη και η εμπειρία μπορεί να είναι απολαυστική για όλους τους εμπλεκόμενους.
    Να θυμάστε πάντα ότι το Win/Win είναι η καλύτερη κατάσταση.

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

#περιλαμβάνω

#περιλαμβάνω

#περιλαμβάνω

Για να εργαστείτε με συμβολοσειρές, πρέπει επίσης να συμπεριλάβετε έναν τυπικό χώρο ονομάτων:

Χρήση χώρου ονομάτων std;

Διαφορετικά, θα πρέπει να καθορίσετε τον περιγραφέα κλάσης std::string αντί για συμβολοσειρά παντού.

Το παρακάτω είναι ένα παράδειγμα προγράμματος που λειτουργεί με συμβολοσειρά (δεν λειτουργεί σε παλιούς μεταγλωττιστές συμβατούς με C!):

#περιλαμβάνω #περιλαμβάνω #περιλαμβάνω χρησιμοποιώντας namespace std? int main() (string s = "Test"; s.insert(1,"!"); cout<< s.c_str() << endl; string *s2 = new string("Hello"); s2->erase(s2->end()); cout<< s2->c_str(); cin.get(); επιστροφή 0; )

Τα κύρια χαρακτηριστικά που έχει η κλάση χορδών:

  • προετοιμασία με μια σειρά χαρακτήρων (ενσωματωμένη συμβολοσειρά) ή άλλο αντικείμενο τύπου string . Ο ενσωματωμένος τύπος δεν έχει τη δεύτερη δυνατότητα?
  • αντιγραφή μιας γραμμής στην άλλη. Για έναν ενσωματωμένο τύπο, πρέπει να χρησιμοποιήσετε τη συνάρτηση strcpy().
  • πρόσβαση σε μεμονωμένους χαρακτήρες μιας συμβολοσειράς για ανάγνωση και γραφή. Στον ενσωματωμένο πίνακα, αυτό γίνεται χρησιμοποιώντας τη λειτουργία ευρετηρίου ή έμμεση διευθυνσιοδότηση χρησιμοποιώντας δείκτη.
  • συγκρίνοντας δύο χορδές για ισότητα. Για έναν ενσωματωμένο τύπο, χρησιμοποιούνται οι συναρτήσεις της οικογένειας strcmp().
  • συνένωση (σύνδεση) δύο χορδών, δίνοντας το αποτέλεσμα είτε ως τρίτη χορδή, είτε αντί μιας από τις αρχικές. Για έναν ενσωματωμένο τύπο, χρησιμοποιείται η συνάρτηση strcat(), αλλά για να λάβετε το αποτέλεσμα σε μια νέα γραμμή, πρέπει να χρησιμοποιήσετε τις συναρτήσεις strcpy() και strcat() διαδοχικά και επίσης να φροντίσετε την εκχώρηση μνήμης.
  • ενσωματωμένα μέσα για τον προσδιορισμό του μήκους μιας συμβολοσειράς (συναρτήσεις μέλους της κλάσης size() και l ength()). Ο μόνος τρόπος για να μάθετε το μήκος μιας ενσωματωμένης συμβολοσειράς τύπου είναι να την υπολογίσετε με τη συνάρτηση strlen().
  • τη δυνατότητα να ανακαλύψετε εάν μια συμβολοσειρά είναι άδεια.

Ας ρίξουμε μια πιο προσεκτική ματιά σε αυτά τα βασικά χαρακτηριστικά.

Αρχικοποίηση συμβολοσειράςόταν περιγράφει και μήκος χορδής(μη συμπεριλαμβανομένου του τερματισμού null terminator):

String st("Η συμβολοσειρά μου\n"); cout<< "Длина " << st << ": " << st.size() << " символов, включая символ новой строки\n";

Η συμβολοσειρά μπορεί επίσης να είναι κενή:

String st2;

Για να ελέγξετε αν είναι κενή η συμβολοσειρά, μπορείτε να συγκρίνετε το μήκος του με 0:

αν (!st.size()) // κενό

ή χρησιμοποιήστε τη μέθοδο vala(), η οποία επιστρέφει true για μια κενή συμβολοσειρά και false για μια μη κενή συμβολοσειρά:

if (st.empty()) // κενό

Η τρίτη μορφή δημιουργίας συμβολοσειράς αρχικοποιεί ένα αντικείμενο τύπου string με ένα άλλο αντικείμενο του ίδιου τύπου:

Συμβολοσειρά st3(st);

Η συμβολοσειρά st3 αρχικοποιείται με τη συμβολοσειρά st . Πώς μπορούμε να βεβαιωθούμε ότι αυτά οι χορδές ταιριάζουν? Ας χρησιμοποιήσουμε τον τελεστή σύγκρισης (==):

Αν (st == st3) // η αρχικοποίηση πέτυχε

Πως αντιγράψτε τη μια γραμμή στην άλλη? Με τον συνήθη τελεστή ανάθεσης:

st2 = st3; // αντιγράψτε το st3 στο st2

Για συνένωση χορδώνχρησιμοποιείται ο τελεστής πρόσθεσης (+) ή ο τελεστής προσθήκης-εκχώρησης (+=). Ας δοθούν δύο γραμμές:

Συμβολοσειρά s1("γεια, "); string s2("world\n");

Μπορούμε να πάρουμε μια τρίτη συμβολοσειρά που αποτελείται από τη συνένωση των δύο πρώτων, έτσι:

Συμβολοσειρά s3 = s1 + s2;

Αν θέλουμε να προσθέσουμε s2 στο τέλος του s1, πρέπει να γράψουμε:

S1 += s2;

Η λειτουργία πρόσθεσης μπορεί να συνδέσει αντικείμενα κλάσης σειράόχι μόνο μεταξύ τους, αλλά και με χορδές του ενσωματωμένου τύπου. Μπορείτε να ξαναγράψετε το παραπάνω παράδειγμα έτσι ώστε οι ειδικοί χαρακτήρες και τα σημεία στίξης να αντιπροσωπεύονται από τον ενσωματωμένο τύπο char * και οι σημαντικές λέξεις να αντιπροσωπεύονται από αντικείμενα συμβολοσειράς κλάσης:

Const char *pc = ", "; string s1("γεια"); string s2("world"); συμβολοσειρά s3 = s1 + pc + s2 + "\n"; cout<< endl << s3;

Τέτοιες εκφράσεις λειτουργούν επειδή ο μεταγλωττιστής "ξέρει" πώς να μετατρέπει αυτόματα αντικείμενα του ενσωματωμένου τύπου σε αντικείμενα κλάσης string . Είναι επίσης δυνατό να αντιστοιχίσετε απλώς μια ενσωματωμένη συμβολοσειρά σε ένα αντικείμενο συμβολοσειράς:

Συμβολοσειρά s1; const char *pc = "ένας πίνακας χαρακτήρων"; s1=pc; // Σωστά

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

Char*str = s1; // σφάλμα μεταγλώττισης

Για να κάνετε αυτήν τη μετατροπή, πρέπει να καλέσετε ρητά τη συνάρτηση μέλους που ονομάζεται c_str() ("Συμβολοσειρά C"):

Const char *str = s1.c_str();

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

ΠΡΟΣ ΤΗΝ μεμονωμένους χαρακτήρεςΈνα αντικείμενο τύπου string , όπως ένας ενσωματωμένος τύπος, μπορεί να προσπελαστεί χρησιμοποιώντας τη λειτουργία ευρετηρίου. Για παράδειγμα, εδώ είναι ένα απόσπασμα κώδικα που αντικαθιστά όλες τις τελείες με κάτω παύλες:

String str("www.disney.com"); int size = str.size(); για (int i = 0; i< size; i++) if (str[i] == ".") str[ i ] = "_"; cout << str;

Replace(str.begin(), str.end(), ".", "_");

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

#περιλαμβάνω

Εφόσον το αντικείμενο συμβολοσειράς συμπεριφέρεται σαν κοντέινερ, μπορούν να εφαρμοστούν άλλοι αλγόριθμοι σε αυτό. Αυτό σας επιτρέπει να επιλύετε προβλήματα που δεν επιλύονται άμεσα από τις συναρτήσεις της κλάσης συμβολοσειράς.

Παρακάτω είναι μια σύντομη περιγραφή των κύριων τελεστών και λειτουργιών της κλάσης συμβολοσειρών, οι σύνδεσμοι στον πίνακα οδηγούν σε περιγραφές στη ρωσική γλώσσα στο Διαδίκτυο. Για μια πιο πλήρη λίστα των δυνατοτήτων της κλάσης συμβολοσειρών, ανατρέξτε, για παράδειγμα, στη Wikipedia ή στο cplusplus.com.

Καθορισμός χαρακτήρων σε μια συμβολοσειρά

χειριστής=

εκχωρεί τιμές σε μια συμβολοσειρά

αναθέτω

εκχωρεί χαρακτήρες σε μια συμβολοσειρά

Πρόσβαση σε μεμονωμένους χαρακτήρες

στο

λήψη του καθορισμένου χαρακτήρα με έλεγχο για το ευρετήριο εκτός ορίων

χειριστής

λήψη του καθορισμένου χαρακτήρα

εμπρός

να πάρει τον πρώτο χαρακτήρα

πίσω

να πάρει τον τελευταίο χαρακτήρα

δεδομένα

επιστρέφει έναν δείκτη στον πρώτο χαρακτήρα μιας συμβολοσειράς

c_str

επιστρέφει μη τροποποιήσιμοΠίνακας χαρακτήρων C που περιέχει τους χαρακτήρες της συμβολοσειράς

Έλεγχος χωρητικότητας χορδής

αδειάζω

ελέγχει εάν μια συμβολοσειρά είναι κενή

Μέγεθος
μήκος

επιστρέφει τον αριθμό των χαρακτήρων σε μια συμβολοσειρά

μέγιστο_μέγεθος

επιστρέφει τον μέγιστο αριθμό χαρακτήρων

Αποθεματικό

κρατά αποθηκευτικό χώρο

Λειτουργίες σε μια χορδή

Σαφή

διαγράφει τα περιεχόμενα της συμβολοσειράς

εισάγετε

εισαγωγή χαρακτήρων

εξάλειψη

αφαίρεση χαρακτήρων

push_back

προσθέτοντας έναν χαρακτήρα στο τέλος μιας συμβολοσειράς

pop_back

αφαιρεί τον τελευταίο χαρακτήρα

προσαρτώ

χειριστής+=

προσθέτει χαρακτήρες στο τέλος μιας συμβολοσειράς

συγκρίνω

συγκρίνει δύο χορδές

αντικαθιστώ

αντικαθιστά κάθε εμφάνιση του καθορισμένου χαρακτήρα

υποστρ

επιστρέφει μια υποσυμβολοσειρά

αντίγραφο

αντιγράφει χαρακτήρες

αλλαγή μεγέθους

αλλάζει τον αριθμό των αποθηκευμένων χαρακτήρων

Χορδές. Είσοδος/έξοδος γραμμής. Μορφοποιημένο I/O. Επεξεργασία συμβολοσειρών με χρήση τυπικών συναρτήσεων γλώσσας C. Εργασία με μνήμη.

1.1. Δήλωση και αρχικοποίηση συμβολοσειρών.

Μια συμβολοσειρά είναι ένας πίνακας χαρακτήρων που τελειώνει με τον κενό χαρακτήρα '\0'. Μια συμβολοσειρά δηλώνεται ως ένας κανονικός πίνακας χαρακτήρων, για παράδειγμα,

char s1; // συμβολοσειρά μήκους εννέα χαρακτήρων

char*s2; // δείκτης σε συμβολοσειρά

Η διαφορά μεταξύ των δεικτών s1 και s2 είναι ότι ο δείκτης s1 είναι μια σταθερά με όνομα, ενώ ο δείκτης s2 είναι μια μεταβλητή.

Οι σταθερές συμβολοσειράς περικλείονται σε διπλά εισαγωγικά, σε αντίθεση με τους χαρακτήρες, οι οποίοι περικλείονται σε μονά εισαγωγικά. Για παράδειγμα,

«Αυτό είναι μια χορδή».

Το μήκος μιας σταθεράς συμβολοσειράς δεν μπορεί να υπερβαίνει τους 509 χαρακτήρες σύμφωνα με το πρότυπο. Ωστόσο, πολλές υλοποιήσεις επιτρέπουν μεγαλύτερες συμβολοσειρές.

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

char s1 = "Αυτή είναι μια συμβολοσειρά.";

Στη γλώσσα προγραμματισμού C, υπάρχει ένας μεγάλος αριθμός συναρτήσεων για εργασία με συμβολοσειρές, τα πρωτότυπα των οποίων περιγράφονται στα αρχεία κεφαλίδας stdlib.h και string.h. Η εργασία με αυτές τις λειτουργίες θα συζητηθεί στις επόμενες παραγράφους.

1.2. Είσοδος/έξοδος γραμμής.

Για να εισαγάγετε μια συμβολοσειρά από την κονσόλα, χρησιμοποιήστε τη συνάρτηση

char* παίρνει(char*str);

που γράφει μια συμβολοσειρά στη διεύθυνση str και επιστρέφει τη διεύθυνση της συμβολοσειράς εισόδου. Η συνάρτηση σταματά την εισαγωγή εάν συναντήσει τον χαρακτήρα '\n' ή EOF (τέλος αρχείου). Ο χαρακτήρας της νέας γραμμής δεν αντιγράφεται. Ένα null byte τοποθετείται στο τέλος της γραμμής ανάγνωσης. Σε περίπτωση επιτυχίας, η συνάρτηση επιστρέφει έναν δείκτη στη γραμμή ανάγνωσης και σε περίπτωση αποτυχίας, NULL.

Για να εξάγετε μια συμβολοσειρά στην κονσόλα, χρησιμοποιήστε την τυπική συνάρτηση

int puts (const char *s);

που επιστρέφει μη αρνητικό αριθμό στην επιτυχία και ΕΟΦ στην αποτυχία.

Τα πρωτότυπα συναρτήσεων gets και puts περιγράφονται στο αρχείο κεφαλίδας stdio.h.

#περιλαμβάνω

printf("Συμβολοσειρά εισόδου: ");

1.3. Μορφοποιημένο I/O.

Για μορφοποιημένη είσοδο από την κονσόλα, χρησιμοποιήστε τη συνάρτηση

int scanf (const char *format, ...);

που επιστρέφει τον αριθμό των μονάδων δεδομένων που διαβάζονται κατά την επιτυχία και τον ΕΟΦ σε περίπτωση αποτυχίας. Η παράμετρος μορφή πρέπει να δείχνει σε μια συμβολοσειρά μορφής που περιέχει προδιαγραφές μορφής εισόδου. Ο αριθμός και οι τύποι ορισμάτων που ακολουθούν μετά τη συμβολοσειρά μορφοποίησης πρέπει να ταιριάζουν με τον αριθμό και τους τύπους μορφών εισόδου που καθορίζονται στη συμβολοσειρά μορφοποίησης. Εάν αυτή η προϋπόθεση δεν πληρούται, τότε το αποτέλεσμα της συνάρτησης είναι απρόβλεπτο.

Οι χαρακτήρες διαστήματος, "\t" ή "\n" στη συμβολοσειρά μορφής περιγράφουν έναν ή περισσότερους κενούς χαρακτήρες στη ροή εισόδου, οι οποίοι περιλαμβάνουν τους ακόλουθους χαρακτήρες: space, '\t', '\n', '\v', '\f'. Η λειτουργία σάρωσης παρακάμπτει τους μηδενικούς χαρακτήρες στη ροή εισόδου.

Οι κυριολεκτικοί χαρακτήρες σε μια συμβολοσειρά μορφής, με εξαίρεση τον χαρακτήρα %, απαιτούν ακριβώς τους ίδιους χαρακτήρες να εμφανίζονται στη ροή εισόδου. Εάν δεν υπάρχει τέτοιος χαρακτήρας, το scanf διακόπτει την είσοδο. Η λειτουργία σάρωσης παρακάμπτει τους κυριολεκτικούς χαρακτήρες.

Γενικά, η προδιαγραφή της μορφής εισόδου είναι:

%[*] [πλάτος] [τροποποιητές] τύπος

Ο χαρακτήρας '*' υποδηλώνει ένα κενό κατά την εισαγωγή ενός πεδίου που ορίζεται από αυτήν την προδιαγραφή.

- «πλάτος» ορίζει τον μέγιστο αριθμό χαρακτήρων που εισάγονται από αυτήν την προδιαγραφή.

Ο τύπος μπορεί να λάβει τις ακόλουθες τιμές:

c είναι ένας πίνακας χαρακτήρων,

s – συμβολοσειρά χαρακτήρων, οι συμβολοσειρές χωρίζονται με κενούς χαρακτήρες,

Το d είναι ένας υπογεγραμμένος ακέραιος στα 10 s/s,

Το i είναι ένας ακέραιος αριθμός, το σύστημα αριθμών βασίζεται στα δύο πρώτα ψηφία,

u είναι ένας ανυπόγραφος ακέραιος σε 10 s/s,

o είναι ένας ανυπόγραφος ακέραιος σε 8 s/s,

x, X είναι ένας ανυπόγραφος ακέραιος σε 16 s/s,

e, E, f, g, G - κυμαινόμενος αριθμός,

Το p είναι ένας δείκτης σε έναν δείκτη,

n είναι ένας δείκτης σε έναν ακέραιο,

[…] είναι μια σειρά από σαρωμένους χαρακτήρες, για παράδειγμα, .

Στην τελευταία περίπτωση, μόνο οι χαρακτήρες που περικλείονται σε αγκύλες θα εισαχθούν από τη ροή εισόδου. Εάν ο πρώτος χαρακτήρας μέσα σε αγκύλες είναι '^', τότε εισάγονται μόνο εκείνοι οι χαρακτήρες που δεν περιλαμβάνονται στον πίνακα. Το εύρος των χαρακτήρων σε έναν πίνακα καθορίζεται μέσω του χαρακτήρα '-'. Όταν εισάγονται χαρακτήρες, εισάγονται επίσης κενοί χαρακτήρες και το τερματικό μηδενικό byte της συμβολοσειράς.

Οι τροποποιητές μπορούν να λάβουν τις ακόλουθες τιμές:

Το h είναι ένας σύντομος ακέραιος αριθμός,

l, L - μακρύς ακέραιος ή float,

και χρησιμοποιούνται μόνο για ακέραιους αριθμούς ή πλωτήρες.

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

#περιλαμβάνω

printf("Εισαγωγή ακέραιου αριθμού: ");

scanf("%d", &n);

printf("Εισαγωγή διπλού: ");

scanf(" %lf", &d);

printf("Εισαγωγή χαρακτήρων: ");

scanf(" %c", &c);

printf("Εισαγωγή συμβολοσειράς: ");

scanf("%s", &s);

Σημειώστε ότι σε αυτό το πρόγραμμα αρχικοποιείται ο αριθμός κινητής υποδιαστολής. Αυτό γίνεται για να συμπεριλάβει ο μεταγλωττιστής μια βιβλιοθήκη που να υποστηρίζει την εργασία με κυμαινόμενους αριθμούς. Εάν αυτό δεν γίνει, θα προκύψει σφάλμα κατά την εκτέλεση κατά την εισαγωγή ενός κυμαινόμενου αριθμού.

Για μορφοποιημένη έξοδο στην κονσόλα, χρησιμοποιήστε τη συνάρτηση

int printf (const char *format, ...);

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

%[flags] [width] [.precision] [τροποποιητές] τύπος

- οι «σημαίες» είναι διάφορα σύμβολα που καθορίζουν τη μορφή εξόδου·

- Το 'πλάτος' ορίζει τον ελάχιστο αριθμό χαρακτήρων που εξάγονται από αυτήν την προδιαγραφή.

- «.precision» ορίζει τον μέγιστο αριθμό χαρακτήρων που πρέπει να εξάγονται.

- οι «τροποποιητές» καθορίζουν τον τύπο των ορισμάτων·

- Το 'type' καθορίζει τον τύπο του ορίσματος.

Η ακόλουθη μορφή εξόδου χρησιμοποιείται για την εκτύπωση υπογεγραμμένων ακεραίων αριθμών:

%[-] [+ | διάστημα] [πλάτος] [l] δ

- – στοίχιση προς τα αριστερά, από προεπιλογή – προς τα δεξιά.

+ - εμφανίζεται το σύμβολο '+', σημειώστε ότι για αρνητικούς αριθμούς εμφανίζεται πάντα το σύμβολο '-'.

«κενό» – εμφανίζεται ένα κενό στη θέση του χαρακτήρα.

d είναι ο τύπος δεδομένων int.

Για την έξοδο ανυπόγραφων ακεραίων, χρησιμοποιείται η ακόλουθη μορφή εξόδου:

%[-] [#] [πλάτος] [l]

# - εμφανίζει το αρχικό 0 για αριθμούς σε 8 c/c ή το αρχικό 0x ή 0X για αριθμούς σε 16 c/c,

l – τροποποιητής τύπου long data.

u είναι ένας ακέραιος σε 10c/c,

o είναι ένας ακέραιος σε 8 c/c,

x, το X είναι ακέραιος σε 16 c/c.

Για την εμφάνιση αριθμών κινητής υποδιαστολής, χρησιμοποιείται η ακόλουθη μορφή εξόδου:

%[-] [+ | space] [πλάτος] [.ακρίβεια]

Η "ακρίβεια" αναφέρεται στον αριθμό των ψηφίων μετά την υποδιαστολή για τις μορφές f, e και E ή στον αριθμό των σημαντικών ψηφίων για τις μορφές g και G. Οι αριθμοί στρογγυλοποιούνται. Η προεπιλογή είναι έξι δεκαδικά ψηφία ακριβείας.

f είναι ένας σταθερός αριθμός σημείου,

Το e είναι ένας αριθμός σε εκθετική μορφή, ο εκθέτης συμβολίζεται με το γράμμα "e",

Το E είναι ένας αριθμός σε εκθετική μορφή, ο εκθέτης συμβολίζεται με το γράμμα "E",

g είναι η συντομότερη από τις μορφές f ή g,

Το G είναι η συντομότερη από τις μορφές f ή G.

printf ("n = %d\n f = %f\n e = %e\n E = %E\n f = %.2f", -123, 12.34, 12.34, 12.34, 12.34);

// εκτυπώσεις: n = 123 f = 12,340000 e = 1,234000e+001 E = 1,234000E+001 f = 12,34

1.4. Μορφοποίηση συμβολοσειράς.

Υπάρχουν παραλλαγές των συναρτήσεων scanf και printf που έχουν σχεδιαστεί για να μορφοποιούν συμβολοσειρές και ονομάζονται sscanf και sprintf, αντίστοιχα.

int sscanf (const char *str, const char *format, ...);

διαβάζει δεδομένα από τη συμβολοσειρά που καθορίζεται από την παράμετρο str σύμφωνα με τη συμβολοσειρά μορφής που καθορίζεται από την παράμετρο μορφής. Επιστρέφει τον όγκο των δεδομένων που διαβάζονται για την επιτυχία, τον ΕΟΦ σε περίπτωση αποτυχίας. Για παράδειγμα,

#περιλαμβάνω

char str = "a 10 1.2 String Χωρίς είσοδο";

sscanf(str, "%c %d %lf %s", &c, &n, &d, s);

printf("%c\n", c); // εκτυπώνει: α

printf("%d\n", n); // εκτυπώσεις: 10

printf("%f\n", d); // εκτυπώσεις: 1,200000

printf("%s\n", s); // prints: String

int sprintf (char *buffer, const char *format, ...);

μορφοποιεί τη συμβολοσειρά σύμφωνα με τη μορφή που καθορίζεται από την παράμετρο μορφής και εγγράφει το αποτέλεσμα στον πίνακα χαρακτήρων buffer. Η συνάρτηση επιστρέφει τον αριθμό των χαρακτήρων που είναι γραμμένοι στον πίνακα χαρακτήρων προσωρινής αποθήκευσης, εξαιρουμένου του μηδενικού byte τερματισμού. Για παράδειγμα,

#περιλαμβάνω

char str = "c = %c, n = %d, d = %f, s = %s";

char s = "Αυτή είναι μια συμβολοσειρά.";

sprintf(buffer, str, c, n, d, s);

printf("%s\n", buffer); // εκτυπώνει: c = c, n = 10, d = 1,200000, s = Αυτή είναι μια συμβολοσειρά

1.5. Μετατροπή συμβολοσειρών σε αριθμητικά δεδομένα.

Τα πρωτότυπα των συναρτήσεων για τη μετατροπή συμβολοσειρών σε αριθμητικά δεδομένα δίνονται στο αρχείο κεφαλίδας stdlib.h, το οποίο πρέπει να συμπεριληφθεί στο πρόγραμμα.

Για να μετατρέψετε μια συμβολοσειρά σε ακέραιο, χρησιμοποιήστε τη συνάρτηση

int atoi (const char *str);

char *str = "-123";

n = atoi(str); // n = -123

Για να μετατρέψετε μια συμβολοσειρά σε μακρύ ακέραιο, χρησιμοποιήστε τη συνάρτηση

long int atol (const char *str);

η οποία, εάν είναι επιτυχής, επιστρέφει τον ακέραιο αριθμό στον οποίο μετατράπηκε η συμβολοσειρά str και 0 εάν δεν είναι επιτυχής.

char *str = "-123";

n = atol(str); // n = -123

Για να μετατρέψετε μια συμβολοσειρά σε διπλή, χρησιμοποιήστε τη συνάρτηση

διπλό atof (const char *str);

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

char *str = "-123.321";

n = atof(str); // n = -123.321

Οι παρακάτω συναρτήσεις εκτελούν παρόμοιες ενέργειες με atoi, atol, atof, αλλά παρέχουν περισσότερη λειτουργικότητα.

long int strtol (const char *str, char **endptr, int base);

μετατρέπει τη συμβολοσειρά str σε μεγάλη int, την οποία επιστρέφει. Οι παράμετροι αυτής της συνάρτησης έχουν τον ακόλουθο σκοπό.

Εάν το όρισμα βάσης είναι 0, τότε η μετατροπή εξαρτάται από τους δύο πρώτους χαρακτήρες του str:

Εάν ο πρώτος χαρακτήρας είναι ένα ψηφίο από το 1 έως το 9, τότε ο αριθμός θεωρείται ότι αναπαρίσταται σε 10 c/c.

Εάν ο πρώτος χαρακτήρας είναι ο αριθμός 0 και ο δεύτερος χαρακτήρας είναι ένας αριθμός από το 1 έως το 7, τότε ο αριθμός θεωρείται ότι αναπαρίσταται σε 8 c/c.

Εάν ο πρώτος χαρακτήρας είναι 0 και ο δεύτερος χαρακτήρας είναι «X» ή «x», τότε ο αριθμός θεωρείται ότι αναπαρίσταται σε 16 c/c.

Εάν το όρισμα βάσης είναι ένας αριθμός από το 2 έως το 36, τότε αυτή η τιμή λαμβάνεται ως βάση του συστήματος αριθμών και οποιοσδήποτε χαρακτήρας υπερβαίνει αυτό το σύστημα σταματά τη μετατροπή. Αριθμητικά συστήματα με βάση το 11 έως το 36 χρησιμοποιούν τα σύμβολα «Α» έως «Ζ» ή «α» έως «ζ» για να αναπαραστήσουν ψηφία.

Η τιμή του ορίσματος endptr ορίζεται από τη συνάρτηση strtol. Αυτή η τιμή περιέχει έναν δείκτη στον χαρακτήρα που σταμάτησε τη μετατροπή του str. Η συνάρτηση strtol επιστρέφει τον αριθμό μετατροπής σε περίπτωση επιτυχίας και 0 σε περίπτωση αποτυχίας.

n = strtol("12a", &p, 0);

printf(" n = %ld, %stop = %c, n, *p); // n = 12, stop = a

n = strtol("012b", &p, 0);

printf(" n = %ld, %stop = %c, n, *p); // n = 10, διακοπή = β

n = strtol("0x12z", &p, 0);

printf(" n = %ld, %stop = %c, n, *p); // n = 18, stop = z

n = strtol("01117", &p, 0);

printf(" n = %ld, %stop = %c, n, *p); // n = 7, stop = 7

ανυπόγραφο long int strtol (const char *str, char **endptr, int base);

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

διπλό strtod (const char *str, char **endptr);

μετατρέπει τη συμβολική παράσταση ενός αριθμού σε διπλό.

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

Επιπλέον, εάν η τιμή χαρακτήρων ενός αριθμού υπερβαίνει το εύρος των επιτρεπόμενων τιμών για τον αντίστοιχο τύπο δεδομένων, τότε οι συναρτήσεις atof, strtol, strtoul, strtod ορίζουν την τιμή της μεταβλητής errno σε ERANGE. Η μεταβλητή errno και η σταθερά ERANGE ορίζονται στο αρχείο κεφαλίδας math.h. Οι συναρτήσεις atof και strtod επιστρέφουν HUGE_VAL, η συνάρτηση strtol επιστρέφει LONG_MAX ή LONG_MIN και η συνάρτηση strtoul επιστρέφει ULONG_MAX.

Οι μη τυπικές συναρτήσεις itoa, ltoa, utoa, ecvt, fcvt και gcvt μπορούν να χρησιμοποιηθούν για τη μετατροπή αριθμητικών δεδομένων σε συμβολοσειρές χαρακτήρων. Αλλά είναι καλύτερο να χρησιμοποιήσετε την τυπική συνάρτηση sprintf για αυτούς τους σκοπούς.

1.6. Τυπικές λειτουργίες για εργασία με χορδές.

Σε αυτήν την ενότητα, εξετάζονται οι συναρτήσεις για την εργασία με συμβολοσειρές, τα πρωτότυπα των οποίων περιγράφονται στο αρχείο κεφαλίδας string.h.

1. Σύγκριση χορδών.Οι συναρτήσεις strcmp και strncmp χρησιμοποιούνται για τη σύγκριση συμβολοσειρών.

int strcmp (const char *str1, const char *str2);

συγκρίνει τις συμβολοσειρές str1, str2 λεξικογραφικά και επιστρέφει -1, 0 ή 1 εάν το str1 είναι μικρότερο, ίσο ή μεγαλύτερο από το str2, αντίστοιχα.

int strncmp (const char *str1, const char *str2, size_t n);

λεξικογραφικά συγκρίνει το πολύ τους πρώτους n χαρακτήρες από τις συμβολοσειρές str1 και str2. Η συνάρτηση επιστρέφει -1, 0 ή 1 εάν οι πρώτοι n χαρακτήρες του str1 είναι μικρότεροι, ίσοι ή μεγαλύτεροι από τους πρώτους n χαρακτήρες του str2, αντίστοιχα.

// Παράδειγμα σύγκρισης συμβολοσειρών

#περιλαμβάνω

#περιλαμβάνω

char str1 = "aa bb";

char str2 = "aa aa";

char str3 = "aa bb cc";

printf("%d\n", strcmp(str1, str3)); // εκτυπώσεις: -1

printf("%d\n", strcmp(str1, str1)); // εκτυπώσεις: -0

printf("%d\n", strcmp(str1, str2)); // εκτυπώσεις: 1

printf("%d\n", strncmp(str1, str3, 5)); // εκτυπώσεις: 0

2. Αντιγραφή γραμμών.Οι συναρτήσεις strcpy και strncpy χρησιμοποιούνται για την αντιγραφή συμβολοσειρών.

char *strcpy (char *str1, const char *str2);

αντιγράφει τη συμβολοσειρά str2 στη συμβολοσειρά str1. Η συμβολοσειρά str2 αντιγράφεται ολόκληρη, συμπεριλαμβανομένου του μηδενικού byte τερματισμού. Η συνάρτηση επιστρέφει έναν δείκτη στο str1. Εάν οι γραμμές αλληλεπικαλύπτονται, τότε το αποτέλεσμα είναι απρόβλεπτο.

char *strncpy (char *str1, const char *str2, size_t n);

αντιγράφει n χαρακτήρες από τη συμβολοσειρά str2 στη συμβολοσειρά str1. Εάν η συμβολοσειρά str2 περιέχει λιγότερους από n χαρακτήρες, τότε το τελευταίο null byte αντιγράφεται όσες φορές χρειάζεται για να επεκταθεί η συμβολοσειρά str2 σε n χαρακτήρες. Η συνάρτηση επιστρέφει έναν δείκτη στη συμβολοσειρά str1.

char str2 = "Αντιγραφή συμβολοσειράς.";

strcpy(str1, str2);

printf(str1); // prints: Αντιγραφή συμβολοσειράς.

4. Συνδετικές χορδές.Οι συναρτήσεις strcat και strncat χρησιμοποιούνται για τη σύνδεση συμβολοσειρών σε μία μόνο συμβολοσειρά.

char* strcat (char *str1, const char *str2);

προσαρτά τη συμβολοσειρά str2 στη συμβολοσειρά str1, με το τερματικό null byte της συμβολοσειράς str1 να έχει διαγραφεί. Η συνάρτηση επιστρέφει έναν δείκτη στη συμβολοσειρά str1.

char* strncat (char *str1, const char *str2, size_t n);

συνενώνει n χαρακτήρες από τη συμβολοσειρά str2 στη συμβολοσειρά str1, διαγράφοντας το τερματικό null byte του str1. Η συνάρτηση επιστρέφει έναν δείκτη στη συμβολοσειρά str1. εάν το μήκος της συμβολοσειράς str2 είναι μικρότερο από n, τότε προστίθενται μόνο οι χαρακτήρες που περιλαμβάνονται στη συμβολοσειρά str2. Μετά τη συνένωση συμβολοσειρών, ένα μηδενικό byte προστίθεται πάντα στο str1. Η συνάρτηση επιστρέφει έναν δείκτη στη συμβολοσειρά str1.

#περιλαμβάνω

#περιλαμβάνω

char str1 = "χορδή";

char str2 = "catenation";

char str3 = "Ναι Όχι";

strcat(str1, str2);

printf("%s\n", str1); // εκτυπώσεις: Κατενοποίηση συμβολοσειρών

strncat(str1, str3, 3);

printf("%s\n", str1); // εκτυπώσεις: Σειρά συμβολοσειράς Ναι

5. Αναζητήστε έναν χαρακτήρα σε μια συμβολοσειρά.Οι συναρτήσεις strchr, strrchr, strspn, strcspn και strpbrk χρησιμοποιούνται για την αναζήτηση ενός χαρακτήρα σε μια συμβολοσειρά.

char* strchr (const char *str, int c);

αναζητά την πρώτη εμφάνιση του χαρακτήρα που καθορίζεται από την παράμετρο c στη συμβολοσειρά str. Σε περίπτωση επιτυχίας, η συνάρτηση επιστρέφει έναν δείκτη στον πρώτο χαρακτήρα που βρέθηκε και σε περίπτωση αποτυχίας, NULL.

char* strrchr (const char *str, int c);

αναζητά την τελευταία εμφάνιση του χαρακτήρα που καθορίζεται από την παράμετρο c στη συμβολοσειρά str. Σε περίπτωση επιτυχίας, η συνάρτηση επιστρέφει έναν δείκτη στον τελευταίο χαρακτήρα που βρέθηκε και σε περίπτωση αποτυχίας, NULL.

#περιλαμβάνω

#περιλαμβάνω

char str = "αναζήτηση χαρακτήρων";

printf("%s\n", strchr(str, "r")); // prints: r αναζήτηση

printf("%s\n", strrchr(str, "r")); // εκτυπώσεις: rch

size_t strspn (const char *str1, const char *str2);

επιστρέφει το ευρετήριο του πρώτου χαρακτήρα στο str1 που δεν είναι στο str2.

size_t strcspn (const char *str1, const char *str2);

επιστρέφει το ευρετήριο του πρώτου χαρακτήρα στο str1 που βρίσκεται στο str2.

char str = "123 abc";

printf("n = %d\n", strspn(str, "321"); // εκτυπώνει: n = 3

printf ("n = %d\n", strcspn (str, "cba"); // εκτυπώνει: n = 4

char* strpbrk (const char *str1, const char *str2);

βρίσκει τον πρώτο χαρακτήρα στο str1 που είναι ίσος με έναν από τους χαρακτήρες του str2. Σε περίπτωση επιτυχίας, η συνάρτηση επιστρέφει έναν δείκτη σε αυτόν τον χαρακτήρα και σε περίπτωση αποτυχίας, NULL.

char str = "123 abc";

printf("%s\n", strpbrk(str, "bca")); // εκτυπώσεις: abc

6. Σύγκριση χορδών.Η συνάρτηση strstr χρησιμοποιείται για τη σύγκριση συμβολοσειρών.

char* strstr (const char *str1, const char *str2);

βρίσκει την πρώτη εμφάνιση της συμβολοσειράς str2 (χωρίς το τελευταίο μηδενικό byte) στη συμβολοσειρά str1. Σε περίπτωση επιτυχίας, η συνάρτηση επιστρέφει έναν δείκτη στην υποσυμβολοσειρά που βρέθηκε και σε περίπτωση αποτυχίας, NULL. Εάν ο δείκτης str1 δείχνει σε μια συμβολοσειρά μηδενικού μήκους, τότε η συνάρτηση επιστρέφει τον δείκτη str1.

char str = "123 abc 456;

printf("%s\n", strstr(str, "abc"); // print: abc 456

7. Ανάλυση μιας συμβολοσειράς σε μάρκες.Η συνάρτηση strtok χρησιμοποιείται για την ανάλυση μιας συμβολοσειράς σε διακριτικά.

char* strtok (char *str1, const char *str2);

επιστρέφει έναν δείκτη στο επόμενο διακριτικό (λέξη) στη συμβολοσειρά str1, όπου τα διαχωριστικά διακριτικών είναι χαρακτήρες από τη συμβολοσειρά str2. Εάν τα διακριτικά έχουν τελειώσει, τότε η συνάρτηση επιστρέφει NULL. Στην πρώτη κλήση στη συνάρτηση strtok, η παράμετρος str1 πρέπει να δείχνει σε μια συμβολοσειρά που αναλύεται σε διακριτικά και σε επόμενες κλήσεις, αυτή η παράμετρος πρέπει να οριστεί σε NULL. Μετά την εύρεση του διακριτικού, η συνάρτηση strtok γράφει ένα null byte μετά από αυτό το διακριτικό στη θέση του οριοθέτη.

#περιλαμβάνω

#περιλαμβάνω

char str = "12 34 ab cd";

p = strtok(str, " ");

printf("%s\n",p); // εκτυπώνει τιμές σε στήλη: 12 34 ab cd

p = strtok(NULL, " ");

8. Προσδιορισμός του μήκους της χορδής.Η συνάρτηση strlen χρησιμοποιείται για τον προσδιορισμό του μήκους μιας συμβολοσειράς.

size_t strlen(const char *str);

επιστρέφει το μήκος της συμβολοσειράς, αγνοώντας το τελευταίο μηδενικό byte. Για παράδειγμα,

char str = "123";

printf("len = %d\n",strlen(str)); // εκτυπώσεις: len = 3

1.7. Λειτουργίες για εργασία με μνήμη.

Το αρχείο κεφαλίδας string.h περιγράφει επίσης λειτουργίες για εργασία με μπλοκ μνήμης, οι οποίες είναι παρόμοιες με τις αντίστοιχες συναρτήσεις για εργασία με συμβολοσειρές.

void* memchr(const void *str, int c, size_t n);

αναζητά την πρώτη εμφάνιση του χαρακτήρα που καθορίζεται από το c σε n byte του str.

int memcmp(const void *str1, const void *str2, size_t n);

συγκρίνει τα πρώτα n byte του str1 και του str2.

void* memcpy(const void *str1, const void *str2, size_t n);

αντιγράφει τα πρώτα n byte από τη συμβολοσειρά str1 στη συμβολοσειρά str2.

void* memmove(const void *str1, const void *str2, size_t n);

αντιγράφει τα πρώτα n byte από το str1 στο str2, διασφαλίζοντας ότι ο χειρισμός των αλληλοκαλυπτόμενων συμβολοσειρών γίνεται σωστά.

void* memset(const void *str, int c, size_t n);

αντιγράφει τον χαρακτήρα που καθορίζεται από το c στα πρώτα n byte του str.