C++ Συνάρτηση συμβολοσειράς: strcpy(), strcat(), strlen(), strcmp()

⚡ Έξυπνη Σύνοψη

C++ Συναρτήσεις συμβολοσειράς όπως οι strcpy, strcat, strlen και strcmp επιτρέπουν στα προγράμματα να αντιγράφουν, να ενώνουν, να μετρούν και να συγκρίνουν κείμενο. Αυτός ο πόρος εξηγεί τι είναι μια συμβολοσειρά, πώς να δηλώνετε συμβολοσειρές C-style και std::string, να έχετε πρόσβαση στις τιμές τους και να εφαρμόζετε βασικές συναρτήσεις συμβολοσειράς με παραδείγματα.

  • 🔤 Βασικός Ορισμός: Μια συμβολοσειρά είναι μια ακολουθία χαρακτήρων· μια C++ Το string είναι ένα αντικείμενο της κλάσης std::string.
  • 🧱 Δύο Δηλώσεις: C++ Υποστηρίζει πίνακες χαρακτήρων τύπου C που τερματίζονται με '\0' και τον ασφαλέστερο τύπο κλάσης std::string.
  • 📥 Πρόσβαση σε τιμές: Οι συμβολοσειρές διαβάζονται και εκτυπώνονται με βάση το όνομά τους, όπως φαίνεται και με τους πίνακες char και με την εντολή std::string.
  • Συναρτήσεις συμβολοσειράς: Το strcpy αντιγράφει, το strcat συνενώνει, το strlen μετρά το μήκος και το strcmp συγκρίνει δύο συμβολοσειρές.
  • 📦 Απαιτούμενη κεφαλίδα: Οι συναρτήσεις συμβολοσειράς C βρίσκονται στην κεφαλίδα cstring, η οποία πρέπει να συμπεριληφθεί πριν από τη χρήση.

C++ Λειτουργίες συμβολοσειράς

Τι είναι ένα String;

Μια συμβολοσειρά είναι μια ακολουθία χαρακτήρων. ΕΝΑ C++ Το string είναι ένα αντικείμενο της κλάσης std::string. Οι χαρακτήρες αποθηκεύονται ως ακολουθίες byte, με πρόσβαση σε ένα μόνο byte χαρακτήρα.

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

Δήλωση συμβολοσειρών

C++ υποστηρίζει δύο τύπους δηλώσεων συμβολοσειράς:

  • Συμβολοσειρά χαρακτήρων σε στυλ C
  • Τύπος κλάσης χορδών

Συμβολοσειρά χαρακτήρων C-Style

Αυτός ο τύπος δήλωσης συμβολοσειράς εισήχθη στο Γλώσσα προγραμματισμού C. C++ συνεχίζει να το υποστηρίζει. Είναι απλώς ένας μονοδιάστατος πίνακας χαρακτήρων που τερματίζεται με έναν null χαρακτήρα (\0). Μια συμβολοσειρά που τερματίζεται με null έχει τους χαρακτήρες που αποτελούν τη συμβολοσειρά ακολουθούμενους από έναν null.

Εξετάστε τη δήλωση συμβολοσειράς που δίνεται παρακάτω:

char name[5] = {'J', 'o', 'h', 'n', '\0'};

Η παραπάνω δήλωση δημιουργεί μια συμβολοσειρά που σχηματίζει τη λέξη John. Η λέξη έχει 4 χαρακτήρες, αλλά το μέγεθος της συμβολοσειράς είναι 5. Ο επιπλέον χώρος επιτρέπει τη διατήρηση του null χαρακτήρα.

Χρησιμοποιώντας τον κανόνα αρχικοποίησης πίνακα, μπορούμε να γράψουμε την παραπάνω δήλωση ως εξής:

char name[] = "John";

Σημειώστε ότι δεν χρειάζεται να τοποθετήσετε τον χαρακτήρα null στο τέλος της σταθεράς συμβολοσειράς. C++ ο μεταγλωττιστής θα τοποθετήσει αυτόματα το '\0' στο τέλος της συμβολοσειράς κατά την προετοιμασία του πίνακα.

std::string

Το πρότυπο C++ Η βιβλιοθήκη παρέχει την κλάση string, η οποία υποστηρίζει διάφορες λειτουργίες string. Γράφεται ως std::string.

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

#include <string>

Στη συνέχεια, μπορούμε να δηλώσουμε τη συμβολοσειρά μας χρησιμοποιώντας τη λέξη-κλειδί συμβολοσειράς. Για παράδειγμα:

string name = "John";

Η παραπάνω δήλωση θα δημιουργήσει μια συμβολοσειρά με το όνομα που θα κρατά την τιμή John.

Πρόσβαση στις τιμές συμβολοσειράς

In C++, μπορούμε να έχουμε πρόσβαση στις τιμές συμβολοσειράς χρησιμοποιώντας το όνομα συμβολοσειράς. Για παράδειγμα:

#include <iostream>
using namespace std;
int main() {
	char name[5] = { 'J', 'o', 'h', 'n', '\0' };
	cout << "String value is: ";
	cout << name << endl;
	return 0;
}

Παραγωγή:

Πρόσβαση στις τιμές συμβολοσειράς

Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:

Πρόσβαση στις τιμές συμβολοσειράς

Code Επεξήγηση:

  1. Συμπεριλαμβανομένου του αρχείου κεφαλίδας iostream στον κώδικά μας. Θα μας επιτρέψει να διαβάζουμε και να γράφουμε στην κονσόλα.
  2. Συμπεριλαμβανομένου του χώρου ονομάτων std ώστε να χρησιμοποιείτε τις κλάσεις και τις συναρτήσεις του χωρίς να τον καλείτε.
  3. Κλήση της συνάρτησης main() μέσα στην οποία θα πρέπει να προστεθεί η λογική του προγράμματος. Το { σηματοδοτεί την έναρξη του σώματος της συνάρτησης main().
  4. Δηλώνοντας μια σειρά χαρακτήρων και δίνοντάς της το όνομα. Η συμβολοσειρά θα αποθηκεύσει την τιμή John. Ο επιπλέον χώρος θα αποθηκεύσει τον μηδενικό χαρακτήρα.
  5. Εκτύπωση κειμένου στην κονσόλα.
  6. Εκτύπωση της τιμής του ονόματος συμβολοσειράς στην κονσόλα.
  7. Η συνάρτηση main() θα πρέπει να επιστρέψει μια τιμή εάν το πρόγραμμα εκτελείται σωστά.
  8. Τέλος του σώματος της συνάρτησης main().

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

#include <iostream>
#include <string>
using namespace std;
int main() {

	string name = "Guru99";

	cout << "The name is : " << name << endl;

	return 0;
}

Παραγωγή:

Πρόσβαση στις τιμές συμβολοσειράς

Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:

Πρόσβαση στις τιμές συμβολοσειράς

Code Επεξήγηση:

  1. Συμπεριλαμβανομένου του αρχείου κεφαλίδας iostream στον κώδικά μας. Θα μας επιτρέψει να διαβάζουμε και να γράφουμε στην κονσόλα.
  2. Συμπερίληψη της τυπικής κλάσης συμβολοσειράς στον κώδικά μας.
  3. Συμπεριλαμβανομένου του χώρου ονομάτων std ώστε να χρησιμοποιείτε τις κλάσεις και τις συναρτήσεις του χωρίς να τον καλείτε.
  4. Κλήση της συνάρτησης main() μέσα στην οποία θα πρέπει να προστεθεί η λογική του προγράμματος. Το { σηματοδοτεί την έναρξη του σώματος της συνάρτησης main().
  5. Δήλωση μιας συμβολοσειράς και απόδοση ονόματος name. Η συμβολοσειρά θα αποθηκεύσει την τιμή Guru99.
  6. Εκτύπωση της τιμής του ονόματος συμβολοσειράς μαζί με κάποιο κείμενο στην κονσόλα.
  7. Η συνάρτηση main() θα πρέπει να επιστρέψει μια τιμή εάν το πρόγραμμα εκτελείται σωστά.
  8. Τέλος του σώματος της συνάρτησης main().

Λειτουργίες συμβολοσειράς σε C++

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

strcpy()

Αυτή είναι η συνάρτηση αντιγραφής συμβολοσειράς. Αντιγράφει μια συμβολοσειρά σε μια άλλη συμβολοσειρά.

Σύνταξη:

strcpy(string1, string2);

Οι δύο παράμετροι της συνάρτησης, string1 και string2, είναι συμβολοσειρές. Η συνάρτηση θα αντιγράψει τη συμβολοσειρά string2 στη string1.

strcat()

Αυτή είναι η συνάρτηση σύνδεσης συμβολοσειρών. Συνδέει χορδές.

Σύνταξη:

strcat(string1, string2);

Οι δύο παράμετροι της συνάρτησης, string1 και string2, είναι οι συμβολοσειρές που θα συνενωθούν. Η παραπάνω συνάρτηση θα συνενώσει τη συμβολοσειρά string2 με το τέλος της συμβολοσειράς string1.

strlen()

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

Σύνταξη:

strlen(string1);

Η παράμετρος string1 είναι το όνομα της συμβολοσειράς της οποίας το μήκος πρόκειται να καθοριστεί. Η παραπάνω συνάρτηση θα επιστρέψει το μήκος της συμβολοσειράς1.

strcmp()

Αυτή είναι η συνάρτηση σύγκρισης συμβολοσειρών. Χρησιμοποιείται για σύγκριση συμβολοσειρών.

Σύνταξη:

strcmp(string1, string2);

Η παραπάνω συνάρτηση θα επιστρέψει 0 εάν οι συμβολοσειρές string1 και string2 είναι παρόμοιες, μικρότερη από 0 εάν string1 < string2 και μεγαλύτερη από 0 εάν string1 > string2.

Παράδειγμα:

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

#include <iostream>
#include <cstring>
using namespace std;
int main() {

	char name1[10] = "Guru99";
	char name2[10] = "John";
	char name3[10];

	int len;
	strcpy(name3, name1);
	cout << "strcpy( name3, name1) : " << name3 << endl;

	strcat(name1, name2);
	cout << "strcat( name1, name2): " << name1 << endl;

	len = strlen(name1);
	cout << "strlen(name1) : " << len << endl;
	return 0;
}

Παραγωγή:

Λειτουργίες συμβολοσειράς σε C++

Εδώ είναι ένα στιγμιότυπο οθόνης του κώδικα:

Λειτουργίες συμβολοσειράς σε C++

Code Επεξήγηση:

  1. Συμπεριλαμβανομένου του αρχείου κεφαλίδας iostream στον κώδικά μας. Θα μας επιτρέψει να διαβάζουμε και να γράφουμε στην κονσόλα.
  2. Συμπεριλαμβανομένου του προτύπου κεφαλίδα στον κώδικά μας.
  3. Συμπεριλαμβανομένου του χώρου ονομάτων std ώστε να χρησιμοποιείτε τις κλάσεις και τις συναρτήσεις του χωρίς να τον καλείτε.
  4. Κλήση της συνάρτησης main() μέσα στην οποία θα πρέπει να προστεθεί η λογική του προγράμματος. Το { σηματοδοτεί την έναρξη του σώματος της συνάρτησης main().
  5. Δηλώνοντας μια συμβολοσειρά 10 χαρακτήρων και δίνοντάς της το όνομα name1. Η συμβολοσειρά θα αποθηκεύσει την τιμή Guru99.
  6. Δηλώνοντας μια συμβολοσειρά 10 χαρακτήρων και δίνοντάς της το όνομα2. Η συμβολοσειρά θα αποθηκεύσει την τιμή John.
  7. Δηλώνοντας μια συμβολοσειρά 10 χαρακτήρων και δίνοντάς της το όνομα3.
  8. Δηλώνοντας ένα ακέραια μεταβλητή ονόματι λεν.
  9. Αντιγραφή του ονόματος συμβολοσειράς1 στο όνομα συμβολοσειράς3.
  10. Εκτύπωση της τιμής της συμβολοσειράς name3 μαζί με κάποιο κείμενο στην κονσόλα. Θα πρέπει να εκτυπωθεί Guru99.
  11. Συνένωση της συμβολοσειράς name2 με το τέλος της συμβολοσειράς name1. Η τιμή του name1 είναι τώρα Guru99Ιωάννης.
  12. Εκτύπωση της τιμής της συμβολοσειράς name1 μαζί με κάποιο κείμενο στην κονσόλα. Θα πρέπει να εκτυπωθεί Guru99Ιωάννης.
  13. Προσδιορισμός του μήκους της συμβολοσειράς με όνομα name1 και ανάθεση της τιμής του μήκους στη μεταβλητή len.
  14. Εκτύπωση της τιμής της μεταβλητής len μαζί με κάποιο άλλο κείμενο στην κονσόλα.
  15. Η συνάρτηση main() θα πρέπει να επιστρέψει μια τιμή εάν το πρόγραμμα εκτελείται σωστά.
  16. Τέλος του σώματος της συνάρτησης main().

Συχνές Ερωτήσεις

Ναι. Οι βοηθοί τεχνητής νοημοσύνης μπορούν να αναδιαμορφώσουν πίνακες char σε std::string, να ενημερώσουν σχετικές συναρτήσεις και να εξηγήσουν τα οφέλη ασφαλείας. Οι προγραμματιστές θα πρέπει να εξετάσουν τις αλλαγές για τις περιπτώσεις edge, τα μεγέθη buffer και την προβλεπόμενη συμπεριφορά.

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

Η std::string διαχειρίζεται δυναμικά τη μνήμη και παρέχει ενσωματωμένες λειτουργίες όπως συνένωση και σύγκριση. Οι συμβολοσειρές τύπου C είναι σταθεροί πίνακες χαρακτήρων που τερματίζονται με '\0', οι οποίοι απαιτούν χειροκίνητο χειρισμό μνήμης και είναι πιο επιρρεπείς σε σφάλματα.

Μπορούν να προκαλέσουν υπερχείλιση buffer εάν ο πίνακας προορισμού είναι πολύ μικρός. Ασφαλέστερες εναλλακτικές λύσεις περιλαμβάνουν τις strncpy, strncat ή απλώς τη χρήση των λειτουργιών std::string, οι οποίες διαχειρίζονται αυτόματα τη μνήμη και μειώνουν αυτούς τους κινδύνους.

Συνοψίστε αυτήν την ανάρτηση με: