Συμβολοσειρές στο C: Πώς να δηλώσετε και να αρχικοποιήσετε μια μεταβλητή συμβολοσειράς στο C
Τι είναι το String στο C;
A Χορδή σε C δεν είναι παρά μια συλλογή χαρακτήρων σε μια γραμμική ακολουθία. Το 'C' αντιμετωπίζει πάντα μια συμβολοσειρά ένα μόνο δεδομένο, παρόλο που περιέχει κενά. Ένας μεμονωμένος χαρακτήρας ορίζεται χρησιμοποιώντας αναπαράσταση μεμονωμένου εισαγωγικού. Μια συμβολοσειρά αναπαρίσταται χρησιμοποιώντας διπλά εισαγωγικά.
Example, "Welcome to the world of programming!"
Το 'C' παρέχει τυπική βιβλιοθήκη που περιέχει πολλές συναρτήσεις που μπορούν να χρησιμοποιηθούν για την εύκολη εκτέλεση περίπλοκων λειτουργιών σε συμβολοσειρές στο C.
Πώς να δηλώσετε μια συμβολοσειρά στο C;
Το AC String είναι ένας απλός πίνακας με char ως τύπο δεδομένων. Γλώσσα «C». δεν υποστηρίζει άμεσα τη συμβολοσειρά ως τύπο δεδομένων. Επομένως, για να εμφανίσετε μια συμβολοσειρά στο C, πρέπει να χρησιμοποιήσετε έναν πίνακα χαρακτήρων.
Η γενική σύνταξη για τη δήλωση μιας μεταβλητής ως String στο C είναι η εξής:
char string_variable_name [array_size];
Η κλασική δήλωση χορδών μπορεί να γίνει ως εξής:
char string_name[string_length] = "string";
Το μέγεθος ενός πίνακα πρέπει να ορίζεται κατά τη δήλωση μιας μεταβλητής συμβολοσειράς C, επειδή χρησιμοποιείται για τον υπολογισμό του πόσοι χαρακτήρες πρόκειται να αποθηκευτούν μέσα στη μεταβλητή συμβολοσειράς στο C. Μερικά έγκυρα παραδείγματα δήλωσης συμβολοσειράς είναι τα εξής:
char first_name[15]; //declaration of a string variable char last_name[15];
Το παραπάνω παράδειγμα αντιπροσωπεύει μεταβλητές συμβολοσειράς με μέγεθος πίνακα 15. Αυτό σημαίνει ότι ο δεδομένος πίνακας συμβολοσειρών C μπορεί να περιέχει 15 χαρακτήρες το πολύ. Η ευρετηρίαση του πίνακα ξεκινά από το 0, επομένως θα αποθηκεύει χαρακτήρες από τη θέση 0-14. Ο μεταγλωττιστής C προσθέτει αυτόματα έναν χαρακτήρα NULL '\0' στον πίνακα χαρακτήρων που δημιουργήθηκε.
Πώς να αρχικοποιήσετε μια συμβολοσειρά στο C;
Ας μελετήσουμε την αρχικοποίηση συμβολοσειρών στο C. Το παρακάτω παράδειγμα δείχνει την προετοιμασία των συμβολοσειρών στο C,
char first_name[15] = "ANTHONY"; char first_name[15] = {'A','N','T','H','O','N','Y','\0'}; // NULL character '\0' is required at end in this declaration char string1 [6] = "hello";/* string size = 'h'+'e'+'l'+'l'+'o'+"NULL" = 6 */ char string2 [ ] = "world"; /* string size = 'w'+'o'+'r'+'l'+'d'+"NULL" = 6 */ char string3[6] = {'h', 'e', 'l', 'l', 'o', '\0'} ; /*Declaration as set of characters ,Size 6*/
Στο string3, ο χαρακτήρας NULL πρέπει να προστεθεί ρητά και οι χαρακτήρες περικλείονται σε μονά εισαγωγικά.
Το 'C' μας επιτρέπει επίσης να αρχικοποιήσουμε το a μεταβλητή συμβολοσειράς χωρίς να ορίζεται το μέγεθος του πίνακα χαρακτήρων. Μπορεί να γίνει με τον ακόλουθο τρόπο,
char first_name[ ] = "NATHAN";
Το όνομα των Strings στο C λειτουργεί ως δείκτης επειδή είναι βασικά ένας πίνακας.
C Είσοδος συμβολοσειράς: C Πρόγραμμα για ανάγνωση συμβολοσειράς
Όταν γράφετε διαδραστικά προγράμματα που ζητούν από τον χρήστη εισαγωγή, το C παρέχει τις συναρτήσεις scanf(), gets() και fgets() για να βρει μια γραμμή κειμένου που έχει εισαχθεί από τον χρήστη.
Όταν χρησιμοποιούμε scanf() για ανάγνωση, χρησιμοποιούμε τον προσδιοριστή μορφής "%s" χωρίς να χρησιμοποιούμε το "&" για πρόσβαση στη διεύθυνση της μεταβλητής επειδή ένα όνομα πίνακα λειτουργεί ως δείκτης.
Για παράδειγμα:
#include <stdio.h> int main() { char name[10]; int age; printf("Enter your first name and age: \n"); scanf("%s %d", name, &age); printf("You entered: %s %d",name,age); }
Παραγωγή:
Enter your first name and age: John_Smith 48
Το πρόβλημα με τη συνάρτηση scanf είναι ότι δεν διαβάζει ποτέ ολόκληρες τις συμβολοσειρές σε C. Θα σταματήσει τη διαδικασία ανάγνωσης μόλις εμφανιστεί κενό διάστημα, τροφοδοσία φόρμας, κατακόρυφη καρτέλα, νέα γραμμή ή επιστροφή μεταφοράς. Ας υποθέσουμε ότι δίνουμε είσοδο ως "Guru99 Tutorials" τότε η συνάρτηση scanf δεν θα διαβάσει ποτέ μια ολόκληρη συμβολοσειρά καθώς εμφανίζεται ένας χαρακτήρας κενού μεταξύ των δύο ονομάτων. Η λειτουργία σάρωσης θα διαβάζει μόνο Guru99.
Για να διαβάσουμε μια συμβολοσειρά που περιέχει κενά, χρησιμοποιούμε τη συνάρτηση gets(). Το Gets αγνοεί τα κενά. Σταματάει
ανάγνωση όταν φτάσετε σε μια νέα γραμμή (πατιέται το πλήκτρο Enter).
Για παράδειγμα:
#include <stdio.h> int main() { char full_name[25]; printf("Enter your full name: "); gets(full_name); printf("My full name is %s ",full_name); return 0; }
Παραγωγή:
Enter your full name: Dennis Ritchie My full name is Dennis Ritchie
Μια άλλη ασφαλέστερη εναλλακτική λύση στο gets() είναι η συνάρτηση fgets() που διαβάζει έναν καθορισμένο αριθμό χαρακτήρων.
Για παράδειγμα:
#include <stdio.h> int main() { char name[10]; printf("Enter your name plz: "); fgets(name, 10, stdin); printf("My name is %s ",name); return 0;}
Παραγωγή:
Enter your name plz: Carlos My name is Carlos
Τα ορίσματα fgets() είναι:
- το όνομα της χορδής,
- τον αριθμό των χαρακτήρων προς ανάγνωση,
- stdin σημαίνει ανάγνωση από την τυπική είσοδο που είναι το πληκτρολόγιο.
Έξοδος συμβολοσειράς C: Πρόγραμμα C για εκτύπωση συμβολοσειράς
Η τυπική λειτουργία printf χρησιμοποιείται για την εκτύπωση ή την εμφάνιση συμβολοσειρών σε C σε μια συσκευή εξόδου. Ο προσδιοριστής μορφής που χρησιμοποιείται είναι %s
Παράδειγμα,
printf("%s", name);
Η έξοδος συμβολοσειράς γίνεται με τις συναρτήσεις fputs() και printf().
συνάρτηση fputs().
Η fputs() χρειάζεται το όνομα της συμβολοσειράς και έναν δείκτη στο σημείο που θέλετε να εμφανίσετε το κείμενο. Χρησιμοποιούμε το stdout που αναφέρεται στην τυπική έξοδο για να εκτυπώσουμε στην οθόνη.
Για παράδειγμα:
#include <stdio.h> int main() {char town[40]; printf("Enter your town: "); gets(town); fputs(town, stdout); return 0;}
Παραγωγή:
Enter your town: New York New York
βάζει λειτουργία
Η συνάρτηση puts χρησιμοποιείται για την εκτύπωση συμβολοσειράς σε C σε μια συσκευή εξόδου και τη μετακίνηση του δρομέα πίσω στην πρώτη θέση. Μια συνάρτηση puts μπορεί να χρησιμοποιηθεί με τον ακόλουθο τρόπο:
#include <stdio.h> int main() { char name[15]; gets(name); //reads a string puts(name); //displays a string return 0;}
Η σύνταξη αυτής της συνάρτησης είναι σχετικά απλή από άλλες συναρτήσεις.
Η βιβλιοθήκη εγχόρδων
Η τυπική βιβλιοθήκη «C» παρέχει διάφορες λειτουργίες για τον χειρισμό των συμβολοσειρών σε ένα πρόγραμμα. Αυτές οι συναρτήσεις ονομάζονται επίσης ως χειριστές συμβολοσειρών. Όλοι αυτοί οι χειριστές υπάρχουν στο εσωτερικό αρχείο κεφαλίδας.
Λειτουργία | Σκοπός |
---|---|
strlen() | Αυτή η συνάρτηση χρησιμοποιείται για την εύρεση του μήκους μιας συμβολοσειράς. Επιστρέφει πόσοι χαρακτήρες υπάρχουν σε μια συμβολοσειρά εξαιρουμένου του χαρακτήρα NULL. |
strcat(str1, str2) | Αυτή η συνάρτηση χρησιμοποιείται για το συνδυασμό δύο χορδών μαζί για να σχηματίσουν μια ενιαία συμβολοσειρά. Προσθέτει ή συνενώνει το str2 στο τέλος του str1 και επιστρέφει έναν δείκτη στο str1. |
strcmp(str1, str2) | Αυτή η συνάρτηση χρησιμοποιείται για τη σύγκριση δύο συμβολοσειρών μεταξύ τους. Επιστρέφει 0 εάν το str1 είναι ίσο με str2, μικρότερο από 0 εάν str1 < str2, και μεγαλύτερο από 0 εάν str1 > str2. |
Ας εξετάσουμε το παρακάτω πρόγραμμα που δείχνει τις λειτουργίες της βιβλιοθήκης συμβολοσειρών:
#include <stdio.h> #include <string.h> int main () { //string initialization char string1[15]="Hello"; char string2[15]=" World!"; char string3[15]; int val; //string comparison val= strcmp(string1,string2); if(val==0){ printf("Strings are equal\n"); } else{ printf("Strings are not equal\n"); } //string concatenation printf("Concatenated string:%s",strcat(string1,string2)); //string1 contains hello world! //string length printf("\nLength of first string:%d",strlen(string1)); printf("\nLength of second string:%d",strlen(string2)); //string copy printf("\nCopied string is:%s\n",strcpy(string3,string1)); //string1 is copied into string3 return 0; }
Παραγωγή:
Strings are not equal Concatenated string:Hello World! Length of first string:12 Length of second string:7 Copied string is:Hello World!
Άλλες σημαντικές λειτουργίες της βιβλιοθήκης είναι:
- strncmp(str1, str2, n): επιστρέφει 0 εάν οι πρώτοι n χαρακτήρες του str1 είναι ίσοι με τους πρώτους n χαρακτήρες του str2, μικρότερος από 0 εάν str1 < str2, και μεγαλύτερος από 0 εάν str1 > str2.
- strncpy(str1, str2, n) Αυτή η συνάρτηση χρησιμοποιείται για την αντιγραφή μιας συμβολοσειράς από μια άλλη συμβολοσειρά. Αντιγράφει τους πρώτους n χαρακτήρες του str2 στο str1
- strchr(str1, c): επιστρέφει έναν δείκτη στην πρώτη εμφάνιση του char c στο str1 ή NULL εάν δεν βρεθεί ο χαρακτήρας.
- strrchr(str1, c): αναζητά το str1 αντίστροφα και επιστρέφει έναν δείκτη στη θέση του char c στο str1 ή NULL εάν δεν βρεθεί ο χαρακτήρας.
- strstr(str1, str2): επιστρέφει έναν δείκτη στην πρώτη εμφάνιση του str2 στο str1 ή NULL εάν δεν βρεθεί το str2.
- strncat(str1, str2, n) Προσθέτει (συνενώνει) τους πρώτους n χαρακτήρες του str2 στο τέλος του str1 και επιστρέφει έναν δείκτη στο str1.
- strlwr() :για μετατροπή συμβολοσειράς σε πεζά
- strupr() :για μετατροπή συμβολοσειράς σε κεφαλαία
- strrev() : για αντιστροφή συμβολοσειράς
Μετατροπή συμβολοσειράς σε αριθμό
Στον προγραμματισμό C, μπορούμε να μετατρέψουμε μια συμβολοσειρά αριθμητικών χαρακτήρων σε μια αριθμητική τιμή για να αποτρέψουμε ένα σφάλμα χρόνου εκτέλεσης. Η βιβλιοθήκη stdio.h περιέχει τις ακόλουθες λειτουργίες για τη μετατροπή μιας συμβολοσειράς σε αριθμό:
- int atoi(str) Αντιπροσωπεύει ASCII σε ακέραιο? μετατρέπει το str στην ισοδύναμη τιμή int. Το 0 επιστρέφεται εάν ο πρώτος χαρακτήρας δεν είναι αριθμός ή εάν δεν υπάρχουν αριθμοί.
- double atof(str) Αντιπροσωπεύει το ASCII σε float, μετατρέπει το str στην ισοδύναμη διπλή τιμή. Το 0.0 επιστρέφεται εάν ο πρώτος χαρακτήρας δεν είναι αριθμός ή αν δεν συναντηθούν αριθμοί.
- long int atol(str) Αντιπροσωπεύει το ASCII σε long int, Μετατρέπει το str στην ισοδύναμη μεγάλη ακέραια τιμή. Το 0 επιστρέφεται εάν ο πρώτος χαρακτήρας δεν είναι αριθμός ή εάν δεν υπάρχουν αριθμοί.
Το παρακάτω πρόγραμμα δείχνει τη συνάρτηση atoi():
#include <stdio.h> int main() {char *string_id[10]; int ID; printf("Enter a number: "); gets(string_id); ID = atoi(string_id); printf("you enter %d ",ID); return 0;}
Παραγωγή:
Enter a number: 221348 you enter 221348
- Μια δήλωση δείκτη συμβολοσειράς όπως char *string = "γλώσσα" είναι μια σταθερά και δεν μπορεί να τροποποιηθεί.
Σύνοψη
- Μια συμβολοσειρά είναι μια ακολουθία χαρακτήρων που είναι αποθηκευμένες σε έναν πίνακα χαρακτήρων.
- Μια συμβολοσειρά είναι ένα κείμενο που περικλείεται σε διπλά εισαγωγικά.
- Ένας χαρακτήρας όπως το 'd' δεν είναι συμβολοσειρά και υποδεικνύεται με μονά εισαγωγικά.
- Το 'C' παρέχει τυπικές συναρτήσεις βιβλιοθήκης για το χειρισμό συμβολοσειρών σε ένα πρόγραμμα. Οι χειριστές χορδών αποθηκεύονται σε αρχείο κεφαλίδας.
- Μια συμβολοσειρά πρέπει να δηλωθεί ή να αρχικοποιηθεί πριν χρησιμοποιηθεί σε ένα πρόγραμμα.
- Υπάρχουν διαφορετικές συναρτήσεις συμβολοσειράς εισόδου και εξόδου, καθεμία από τις οποίες έχει τα χαρακτηριστικά της.
- Μην ξεχάσετε να συμπεριλάβετε τη βιβλιοθήκη συμβολοσειρών για να εργαστείτε με τις λειτουργίες της
- Μπορούμε να μετατρέψουμε τη συμβολοσειρά σε αριθμό μέσω των atoi(), atof() και atol() που είναι πολύ χρήσιμα για την κωδικοποίηση και την αποκωδικοποίηση διεργασιών.
- Μπορούμε να χειριστούμε διαφορετικές συμβολοσειρές ορίζοντας μια σειρά από συμβολοσειρές στο C.