Λειτουργία αντιγραφής συμβολοσειράς σε C. Εργασία με Strings

Αυτο 03.09.2019

Τελευταία ενημέρωση: 31/10/2015

Αληλουχία

Η συνένωση ή η ένωση συμβολοσειρών μπορεί να γίνει χρησιμοποιώντας είτε τον τελεστή + είτε τη μέθοδο Concat:

String s1 = "γεια"; string s2 = "world"; συμβολοσειρά s3 = s1 + " " + s2; // αποτέλεσμα: string "hello world" string s4 = String.Concat(s3, "!!!"); // αποτέλεσμα: η συμβολοσειρά "γεια σου κόσμο!!!" Console.WriteLine(s4);

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

Η μέθοδος Join μπορεί επίσης να χρησιμοποιηθεί για τη σύνδεση συμβολοσειρών:

Συμβολοσειρά s5 = "μήλο"; string s6 = "μια μέρα"; string s7 = "κρατά"; string s8 = "ένας γιατρός"; string s9 = "μακριά"; τιμές συμβολοσειράς = νέα συμβολοσειρά (s5, s6, s7, s8, s9); String s10 = String.Join(" ", τιμές); // αποτέλεσμα: η συμβολοσειρά "μήλο την ημέρα κρατά έναν γιατρό μακριά"

Η μέθοδος Join είναι επίσης στατική. Η έκδοση της μεθόδου που χρησιμοποιήθηκε παραπάνω έχει δύο παραμέτρους: μια συμβολοσειρά διαχωρισμού (στην περίπτωση αυτή ένα διάστημα) και μια σειρά από συμβολοσειρές που θα ενωθούν και θα χωριστούν από το διαχωριστικό.

Σύγκριση χορδών

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

String s1 = "γεια"; string s2 = "world"; int αποτέλεσμα = String.Compare(s1, s2); εάν (αποτέλεσμα<0) { Console.WriteLine("Строка s1 перед строкой s2"); } else if (result >0) ( Console.WriteLine("Η γραμμή s1 έρχεται μετά τη γραμμή s2"); ) else (Console.WriteLine("Οι γραμμές s1 και s2 είναι ίδιες"); ) // το αποτέλεσμα θα είναι "Γραμμή s1 πριν από τη γραμμή s2"

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

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

Αναζήτηση σε μια συμβολοσειρά

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

String s1 = "γεια σου κόσμε"; char ch = "o"; int indexOfChar = s1.IndexOf(ch); // ίσο με 4 Console.WriteLine(indexOfChar); string subString = "wor"; int indexOfSubstring = s1.IndexOf(subString); // ίσο με 6 Console.WriteLine(indexOfSubstring);

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

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

Διαδρομή συμβολοσειράς = @"C:\SomeDir"; αρχεία συμβολοσειράς = Directory.GetFiles(διαδρομή); για (int i = 0; i< files.Length; i++) { if(files[i].EndsWith(".exe")) File.Delete(files[i]); }

Σχίσιμο χορδών

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

String text = "Και γι' αυτό συνέβησαν όλα"; string words = text.Split(new char ( " " )); foreach (string s σε λέξεις) ( Console.WriteLine(s); )

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

String words = text.Split(new char ( " " ), StringSplitOptions.RemoveEmptyEntries);

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

Κόψιμο μιας γραμμής

Για να περικόψετε χαρακτήρες που οδηγούν ή ακολουθούν, χρησιμοποιήστε τη λειτουργία Περικοπή:

String text = "γεια σου κόσμε"; text = text.Trim(); // αποτέλεσμα "hello world" text = text.Trim(new char ( "d", "h" )); // αποτέλεσμα "ello world"

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

Αυτή η λειτουργία έχει μερικά ανάλογα: η συνάρτηση TrimStart περικόπτει τους αρχικούς χαρακτήρες και η συνάρτηση TrimEnd περικόπτει τους χαρακτήρες τέλους.

Η συνάρτηση Substring σάς επιτρέπει να περικόψετε ένα συγκεκριμένο τμήμα μιας συμβολοσειράς:

String text = "Καλημέρα"; // αποκοπή ξεκινώντας από τον τρίτο χαρακτήρα text = text.Substring(2); // αποτέλεσμα "καλημέρα" Console.WriteLine(text); // κόψτε πρώτα στους δύο τελευταίους χαρακτήρες text = text.Substring(0, text.Length - 2); // αποτέλεσμα "roshy de" Console.WriteLine(text);

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

Εισάγετε

Για να εισαγάγετε μια σειρά σε μια άλλη, χρησιμοποιήστε τη συνάρτηση Εισαγωγή:

String text = "Καλημέρα"; string subString = "υπέροχο"; text = text.Insert(8, subString); Console.WriteLine(text);

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

Αφαίρεση σειρών

Η μέθοδος Remove βοηθά στην αφαίρεση μέρους μιας συμβολοσειράς:

String text = "Καλημέρα"; // ευρετήριο του τελευταίου χαρακτήρα int ind = text.Length - 1; // κόψτε το κείμενο του τελευταίου χαρακτήρα = text.Remove(ind); Console.WriteLine(text); // κόψτε τους δύο πρώτους χαρακτήρες text = text.Remove(0, 2);

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

Αντικατάσταση

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

String text = "καλημέρα"; text = text.Replace("καλό", "κακό"); Console.WriteLine(text); text = text.Replace("o", ""); Console.WriteLine(text);

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

Αλλαγή υπόθεσης

Για να μετατρέψετε μια συμβολοσειρά σε κεφαλαία και πεζά, χρησιμοποιήστε τις συναρτήσεις ToUpper() και ToLower(), αντίστοιχα:

String hello = "Hello world!"; Console.WriteLine(hello.ToLower()); // Γειά σου Κόσμε! Console.WriteLine(hello.ToUpper()); // ΓΕΙΑ ΣΟΥ ΚΟΣΜΕ!

Ο προγραμματιστής λέει:

Γειά σου! Διάβασα το άρθρο σου. Ήμουν πολύ λυπημένος και αστείος ταυτόχρονα. Αυτή η φράση σας είναι ιδιαίτερα καταστροφική: «Δεδομένου ότι μια μεταβλητή τύπου char χρησιμοποιείται συχνά ως πίνακας, προσδιορίζεται ο αριθμός των πιθανών τιμών». 😆 😆 😆
Δεν γελάω μαζί σου. Η δημιουργία μιας ιστοσελίδας είναι πραγματικά ένα κατόρθωμα. Θέλω απλώς να σας υποστηρίξω με συμβουλές και να επισημάνω μερικά λάθη.

1. Η τιμή μιας μεταβλητής τύπου char εκχωρείται ως εξής:

Εδώ:

Char a = *"A";

Ο δείκτης προς τον πίνακα αποδιευθύνεται και ως αποτέλεσμα επιστρέφεται η τιμή του πρώτου στοιχείου του πίνακα, δηλ. 'ΕΝΑ'

2. Η επαναφορά πραγματοποιείται ως εξής:

Char a = NULL;
char b = ();

//Και έτσι διαγράφεται η γραμμή στο σώμα του προγράμματος

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

3. Μη διστάσετε να χρησιμοποιήσετε ορολογία.
Το σύμβολο = είναι μια λειτουργία ανάθεσης.
Το σύμβολο * είναι μια λειτουργία κατάργησης διευθύνσεων.
Εννοώ αυτό το κομμάτι του άρθρου: "Όλα αποδείχτηκαν τόσο απλά, έπρεπε να βάλεις ένα σύμβολο * μπροστά από το σύμβολο = και έπρεπε να δηλώσεις τον αριθμό του στοιχείου (το μηδέν αντιστοιχεί στον πρώτο)"

Μην με παρεξηγείτε, το άρθρο δεν μπορεί να υπάρχει στην τρέχουσα μορφή του. Μην είστε τεμπέλης, ξαναγράψτε το.
Έχεις μεγάλη ευθύνη! Σοβαρολογώ. Οι σελίδες του ιστότοπού σας περιλαμβάνονται στην πρώτη σελίδα των αποτελεσμάτων του Yandex. Πολλοί άνθρωποι έχουν ήδη αρχίσει να επαναλαμβάνουν τα λάθη σας.

Καλή τύχη! Μπορείς να το κάνεις!

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

Θα χαρώ να διορθώσω άλλα λάθη. διορθώστε τυχόν ανακρίβειες εάν εμφανιστούν. Εκτιμώ την βοήθειά σου. Σας ευχαριστώ, το ξέρω εδώ και πολύ καιρό, είναι απλά δύσκολο να ξαναδιαβάζετε 200 άρθρα συνεχώς για να διορθώνετε κάτι. Και κάποιοι αγενείς τύποι γράφουν με τέτοιο τρόπο που ακόμα και γνωρίζοντας τι είναι καλύτερο να διορθωθεί, δεν είναι καθόλου διατεθειμένοι να το διορθώσουν.
Με τον χαρακτήρα σας b = (); Αυτό δεν είναι καθόλου μηδενισμός. Θα πρέπει τουλάχιστον να το ελέγξουν.
αν μιλάμε για τον μηδενικό χαρακτήρα "" ; Ήξερα καλά όταν γέμισα τη σειρά με αυτό ότι ο στόχος ήταν να δείξω πραγματική κάθαρση, και όχι κάτι ορατό στο μάτι, γιατί η σειρά περιλαμβάνει σκουπίδια, που μερικές φορές εμποδίζουν. Θα πρέπει να είστε πιο προσεκτικοί με τους όρους, "μηδενικό σύμβολο τερματισμού" ή απλώς "μηδενικό σύμβολο", όχι τερματιστής))) Και το σύμβολο τερματισμού ακούγεται απλά ωραίο.

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

Θα χαρώ να διορθώσω άλλα λάθη. διορθώστε τυχόν ανακρίβειες εάν εμφανιστούν. Εκτιμώ την βοήθειά σου. Ευχαριστώ.

Γεια σου και πάλι!
Θέλω να διευκρινίσω. Ο όρος «zero-terminator» (terminator από το English limiter) χρησιμοποιήθηκε από τον καθηγητή μου στο πανεπιστήμιο. Προφανώς αυτό είναι παλιό σχολείο!
Όσο για την επαναφορά σειρών.
char b = (); Αυτό είναι πραγματικά μια επαναφορά. Ολόκληρος ο πίνακας είναι γεμάτος με μηδενικά. Αν δεν με πιστεύετε, δείτε το!
Αν εξετάσουμε μια γραμμή με τη φυσική, καθημερινή της έννοια, τότε μια «κενή» γραμμή θα είναι μια γραμμή στην οποία δεν υπάρχει ούτε ένας χαρακτήρας. Επομένως, στο 99,9% των περιπτώσεων αρκεί να βάλετε έναν μηδενικό χαρακτήρα στην αρχή. Συνήθως, μια συμβολοσειρά επεξεργάζεται μέχρι τον πρώτο μηδενικό χαρακτήρα και οι χαρακτήρες που ακολουθούν δεν είναι πλέον σημαντικοί. Καταλαβαίνω ότι θέλατε να επαναφέρετε τη γραμμή. Μόλις αποφάσισα να προσφέρω μια δοκιμασμένη στο χρόνο κλασική επιλογή.

:
Όταν "Συνήθως η επεξεργασία συμβολοσειράς ανεβαίνει στον πρώτο μηδενικό χαρακτήρα και οι χαρακτήρες που ακολουθούν δεν είναι πλέον σημαντικοί" - ναι, η συμβολοσειρά είναι μηδενική
Εάν λάβουμε υπόψη τον "πραγματικό μηδενισμό όλων των κελιών μιας σειράς (για το οποίο έγραψα)" - όχι, όχι μηδενισμός, και ακόμη και ο πρώτος χαρακτήρας δεν είναι μηδέν. Έλεγξα αυτήν την επιλογή. MinGW(CodeBlock) - ολόκληρος ο πίνακας δίνει τον χαρακτήρα "a"
Δεν νομίζω ότι αυτό είναι λόγος για συζήτηση.

Ετικέτες: Γ γραμμές. Συστοιχία χαρακτήρων.

Χορδές σε C. Εισαγωγή.

Αυτό είναι ένα εισαγωγικό άρθρο για τις χορδές C. Μια πιο λεπτομερής περιγραφή και παραδείγματα θα έρθουν όταν μάθουμε πώς να εργαζόμαστε με τη μνήμη και τους δείκτες. Σε έναν υπολογιστή, όλες οι τιμές αποθηκεύονται ως αριθμοί. Και γραμμές επίσης, δεν υπάρχουν σύμβολα ή γράμματα εκεί. Ένας όρος είναι ένας πίνακας αριθμών. Κάθε αριθμός αντιστοιχεί σε έναν συγκεκριμένο χαρακτήρα, ο οποίος λαμβάνεται από τον πίνακα κωδικοποίησης. Όταν εμφανίζεται στην οθόνη, το σύμβολο εμφανίζεται με συγκεκριμένο τρόπο.
Πίνακες του τύπου char χρησιμοποιούνται για την αποθήκευση συμβολοσειρών. Επαναλαμβάνω για άλλη μια φορά - ο τύπος char είναι αριθμητικός, αποθηκεύει ένα byte δεδομένων. Αλλά σύμφωνα με τον πίνακα κωδικοποίησης, καθένας από αυτούς τους αριθμούς σχετίζεται με έναν χαρακτήρα. Και προς την αντίθετη κατεύθυνση - κάθε χαρακτήρας καθορίζεται από τον αύξοντα αριθμό του στον πίνακα κωδικοποίησης.
Για παράδειγμα

#περιλαμβάνω #περιλαμβάνω void main() ( char c = "A"; int i = 65; printf("εμφάνιση ως char %c\n", c); printf("εμφάνιση ως int %d\n", c); printf(" εμφάνιση ως χαρακτήρας %c\n", i); printf("εμφάνιση ως χαρακτήρας %d\n", i); getch(); )

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

Printf("εμφάνιση ως χαρακτήρα %c\n", c);

Στη συνέχεια θα βγει στην έξοδο
ΕΝΑ
Εάν το βγάλετε ως αριθμό, θα είναι
65
Μπορείτε να κάνετε το ίδιο με τον αριθμό 65, ο οποίος είναι αποθηκευμένος σε μια μεταβλητή όπως ενθ.
Οι ειδικοί χαρακτήρες έχουν επίσης τον δικό τους αριθμό

#περιλαμβάνω #περιλαμβάνω void main() ( printf("%c", "\a"); printf("%d", "\a"); printf("%c", 7); getch(); )

Εδώ θα «εξάγεται» πρώτα το ηχητικό σήμα, μετά η αριθμητική του τιμή και μετά πάλι το ηχητικό σήμα.
Μια συμβολοσειρά στο C είναι ένας πίνακας τύπου απανθρακώνω, το τελευταίο στοιχείο του οποίου αποθηκεύει τον τερματικό χαρακτήρα "\0". Η αριθμητική τιμή αυτού του χαρακτήρα είναι 0, οπότε μπορούμε να πούμε ότι ο πίνακας τελειώνει με μηδέν.
Για παράδειγμα

#περιλαμβάνω #περιλαμβάνω void main() ( char word; word = "A"; word = "B"; word = "C"; word = "\0"; //word = 0; ισοδύναμο με printf("%s", word) getch();

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

Word = "\0";

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

#περιλαμβάνω #περιλαμβάνω void main() ( char word = "ABC"; char text = ("H", "E", "L", "L", "O"); printf("%s\n", word); printf ("%s", κείμενο);

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

Διαβάζοντας γραμμές

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

#περιλαμβάνω #περιλαμβάνω void main() ( char buffer; scanf("%19s", buffer); printf("%s", buffer); getch(); )

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

#περιλαμβάνω #περιλαμβάνω void main() ( char buffer; unsigned len = 0; scanf("%127s", buffer); while (buffer != "\0") ( len++; ) printf("length(%s) == %d" , buffer, len);

Δεδομένου ότι η αριθμητική τιμή του χαρακτήρα "\0" είναι μηδέν, μπορούμε να γράψουμε

Ενώ (buffer != 0) (len++; )

Ή, ακόμα πιο κοντό

Ενώ (buffer) (len++; )

Τώρα ας γράψουμε ένα πρόγραμμα που ζητά από τον χρήστη δύο λέξεις και τις συγκρίνει

#περιλαμβάνω #περιλαμβάνω /* Το αποτέλεσμα της σύγκρισης θα είναι ο αριθμός 0 εάν οι λέξεις είναι ίσες με 1 εάν η πρώτη λέξη είναι μεγαλύτερη από τη δεύτερη σε λεξικογραφική σειρά -1 εάν η δεύτερη λέξη είναι μεγαλύτερη */ void main() ( char firstWord; / /Πρώτη λέξη char secondWord;< 128; i++) { if (firstWord[i] >secondWord[i]) ( //Περισσότερα ακόμα κι αν η δεύτερη λέξη έχει ήδη τελειώσει, γιατί //τότε τελειώνει με μηδέν cmpResult = 1; break; ) αλλιώς αν (firstWord[i]< secondWord[i]) { cmpResult = -1; break; } } printf("%d", cmpResult); getch(); }

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

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

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

Σε C και C++, οι εκτυπώσιμοι χαρακτήρες είναι οι χαρακτήρες που εμφανίζονται στο τερματικό. Σε περιβάλλοντα ASCII βρίσκονται μεταξύ διαστήματος (0x20) και tilde (OxFE). Οι χαρακτήρες ελέγχου έχουν τιμές μεταξύ μηδέν και Ox1F. Αυτά περιλαμβάνουν επίσης το σύμβολο DEL(Ox7F).

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

Στον τίτλο ορίζεται ο τύπος size_t, ο οποίος είναι το αποτέλεσμα της εφαρμογής του τελεστή sizeof και είναι ένας τύπος ανυπόγραφου ακέραιου αριθμού.

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

Κατάλογος λειτουργιών

Ελέγξτε για συσχέτιση

isalnum- Έλεγχος εάν ένα σύμβολο είναι αλφαριθμητικό
isalpha- Έλεγχος εάν ένα σύμβολο ανήκει σε γράμματα
είναι κενό- Ελέγξτε για κενό χαρακτήρα
iscntrl- Έλεγχος εάν ένα σύμβολο είναι σύμβολο ελέγχου
είναι ψηφίο- Έλεγχος εάν ένα σύμβολο είναι ψηφιακό
isgraph- Έλεγχος εάν ένας χαρακτήρας είναι τυπωμένος χαρακτήρας αλλά όχι κενό
πιο κάτω- Έλεγχος εάν ένας χαρακτήρας είναι πεζός
είναι τυπωμένο- Έλεγχος εάν ένα σύμβολο είναι τυπωμένο
είναι διάστικτο- Έλεγχος εάν ένα σύμβολο ανήκει σε σημεία στίξης
isspace- Έλεγχος εάν ένας χαρακτήρας είναι χαρακτήρας κενού διαστήματος
isupper- Έλεγχος εάν ένας χαρακτήρας είναι κεφαλαίος
isxψηφίο- Έλεγχος εάν ένας χαρακτήρας είναι δεκαεξαδικός χαρακτήρας

Εργασία με πίνακες χαρακτήρων

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

Χειρισμός χορδών

strcat- Προσθέτει ένα αντίγραφο μιας γραμμής σε μια δεδομένη
strchr- Επιστρέφει έναν δείκτη στην πρώτη εμφάνιση του χαμηλού byte της δεδομένης παραμέτρου
strcmp- Συγκρίνει δύο χορδές σε λεξικογραφική σειρά
strcoll- Συγκρίνει μια συμβολοσειρά με μια άλλη σύμφωνα με την παράμετρο setlocale
strcpy- Αντιγράφει τα περιεχόμενα μιας γραμμής σε μια άλλη
strcspn- Επιστρέφει μια συμβολοσειρά που δεν περιέχει τους καθορισμένους χαρακτήρες
strerror- Επιστρέφει έναν δείκτη σε μια γραμμή που περιέχει ένα μήνυμα σφάλματος συστήματος
strlen- Επιστρέφει το μήκος μιας συμβολοσειράς με μηδενικό τερματισμό



Συνιστούμε να διαβάσετε

Μπλουζα