Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

4.2 Οι συμβολοσειρές (String) στην C

Συμβολοσειρές στη C
Οι συμβολοσειρές χρησιμοποιούνται για την αποθήκευση κειμένου / χαρακτήρων.

Για παράδειγμα, “Γειά σου Κόσμε” είναι μια συμβολοσειρά χαρακτήρων.

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
char myString[12] = "Hello World";
char myString[12] = "Hello World";
char myString[12] = "Hello World";

Στο παραπάνω παράδειγμα, δημιουργείται ένας πίνακας χαρακτήρων με το όνομα myString και μεγέθους 12. Η αρχική τιμή του πίνακα είναι “Hello World”.

Να σημειωθεί ότι πρέπει να χρησιμοποιήσετε διπλά εισαγωγικά (“”).

Για να εξαγάγετε τη συμβολοσειρά, μπορείτε να χρησιμοποιήσετε τη συνάρτηση printf () μαζί με τον καθοριστή μορφής% s για να ενημερώσετε τη C ότι τώρα εργαζόμαστε με συμβολοσειρές:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
char myString[12] = "Hello World";
printf("My string is: %s", myString);
char myString[12] = "Hello World"; printf("My string is: %s", myString);
char myString[12] = "Hello World";
printf("My string is: %s", myString);

Στο παραπάνω παράδειγμα, χρησιμοποιείται η συνάρτηση printf () για να εμφανίσει τη συμβολοσειρά myString στην οθόνη. Ο καθοριστής μορφής% s χρησιμοποιείται για να πείτε στη C ότι αντί για έναν αριθμό, θα εμφανίσετε μια συμβολοσειρά.

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

Στο παρακάτω παράδειγμα εκτυπώνεται ο πρώτος χαρακτήρας (0) στη συμβολοσειρά greetings:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
char greetings[6] = "Hello";
printf("The first character in the greetings string is: %c", greetings[0]);
char greetings[6] = "Hello"; printf("The first character in the greetings string is: %c", greetings[0]);
char greetings[6] = "Hello";
printf("The first character in the greetings string is: %c", greetings[0]);

Στο παραπάνω παράδειγμα, η συμβολοσειρά greetings περιέχει το κείμενο “Hello”. Με τη χρήση του greetings[0] εκτυπώνεται ο πρώτος χαρακτήρας της συμβολοσειράς “H”.

[adinserter block=”2″]

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

Παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
char greetings[6] = "Hello";
greetings[0] = 'J';
printf("The new string is: %s", greetings);
char greetings[6] = "Hello"; greetings[0] = 'J'; printf("The new string is: %s", greetings);
char greetings[6] = "Hello";
greetings[0] = 'J';
printf("The new string is: %s", greetings);

Στο παραπάνω παράδειγμα, η συμβολοσειρά greetings αρχικά περιλαμβάνει το κείμενο “Hello”. Χρησιμοποιώντας τη γραμμή κώδικα greetings[0] = ‘J’, η τιμή του πρώτου χαρακτήρα της συμβολοσειράς αλλάζει από “H” σε “J”. Η συνάρτηση printf () χρησιμοποιείται στη συνέχεια για να εκτυπώσει τη νέα τιμή της συμβολοσειράς.

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

Παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
char greetings[6] = "Hello";
int i;
for (i = 0; i < 5; i++) {
printf("%c\n", greetings[i]);
}
char greetings[6] = "Hello"; int i; for (i = 0; i < 5; i++) { printf("%c\n", greetings[i]); }
char greetings[6] = "Hello";
int i;
for (i = 0; i < 5; i++) {
  printf("%c\n", greetings[i]);
}

Στο παραπάνω παράδειγμα, η συμβολοσειρά greetings περιέχει το κείμενο “Hello”. Με τη χρήση ενός βρόχου for, η συνάρτηση printf () εμφανίζει κάθε χαρακτήρα της συμβολοσειράς ξεχωριστά. Η μεταβλητή i αυξάνεται κατά ένα σε κάθε επανάληψη του βρόχου, με αποτέλεσμα να εκτυπώνεται κάθε χαρακτήρας της συμβολοσειράς.

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

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

Παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
char greetings[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
printf("The string is: %s", greetings);
char greetings[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; printf("The string is: %s", greetings);
char greetings[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
printf("The string is: %s", greetings);

Στο παραπάνω παράδειγμα, η συμβολοσειρά greetings δημιουργείται με ένα σύνολο χαρακτήρων. Η μεταβλητή greetings αποτελείται από έναν πίνακα χαρακτήρων με μέγεθος 6. Ο τελευταίος χαρακτήρας του πίνακα είναι ο χαρακτήρας ‘\0’, ο οποίος χρησιμοποιείται για να δείξει ότι η συμβολοσειρά έχει τελειώσει. Η συνάρτηση printf () χρησιμοποιείται για να εκτυπώσει τη συμβολοσειρά.

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

Θα πρέπει να σημειώσετε ότι το μέγεθος και των δύο πινάκων είναι το ίδιο: Και οι δύο έχουν 13 χαρακτήρες (ο κενός χώρος μετράει ως χαρακτήρας με τον τρόπο), συμπεριλαμβανομένου του χαρακτήρα \0:

Ένα παράδειγμα θα μπορούσε να είναι η δημιουργία δύο συμβολοσειρών ως εξής:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
char str1[] = "Hello World";
char str2[12] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0'};
char str1[] = "Hello World"; char str2[12] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0'};
char str1[] = "Hello World";
char str2[12] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0'};

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

[adinserter block=”3″]

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

  • \n: νέα γραμμή
  • \t: καρτέλα (διάστημα του ελέγχου)
  • \b: πίσω κενό (κατάργηση)
  • \r: επιστροφή κέρσορα
  • \”: εισαγωγικά
  • \’: μονά εισαγωγικά
  • \: κάθετη γραμμή (backslash)

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

Ο χαρακτήρας απόπειρας και επιστροφής () χρησιμοποιείται στη C ως χαρακτήρας διαφυγής (escape character) για να μετατρέψει ειδικούς χαρακτήρες σε χαρακτήρες στις συμβολοσειρές.

Για παράδειγμα, ο χαρακτήρας \n αναπαριστά μια νέα γραμμή, και ο χαρακτήρας \ αναπαριστά ένα backslash. Έτσι, αν θέλατε να δημιουργήσετε μια συμβολοσειρά που περιέχει ένα μονάδικο εισαγωγικό, θα μπορούσατε να το κάνετε ως εξής:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
char myString[] = "This string contains a single quote: \'";
char myString[] = "This string contains a single quote: \'";
char myString[] = "This string contains a single quote: \'"; 

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

Το είναι ένα από τα κύρια header αρχεία της C που περιλαμβάνει πολλές χρήσιμες συναρτήσεις για τις συμβολοσειρές.

Ας δούμε μερικές από τις βασικές συναρτήσεις συμβολοσειρών στη C:

strlen(): Επιστρέφει το μήκος μιας συμβολοσειράς.

strcpy(): Αντιγράφει τη μια συμβολοσειρά σε μια άλλη.

strcat(): Συνενώνει δύο συμβολοσειρές σε μία.

strcmp(): Συγκρίνει δύο συμβολοσειρές και επιστρέφει μια τιμή που δείχνει αν είναι ίσες ή όχι.

strstr(): Βρίσκει την πρώτη εμφάνιση ενός υποσυνόλου σε μια συμβολοσειρά.

Ας δούμε ένα παράδειγμα για τη χρήση της συνάρτησης strlen():

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <stdio.h>
#include <string.h>
int main() {
char myString[20] = "Hello, world!";
int length = strlen(myString);
printf("The length of the string is: %d", length);
return 0;
}
#include <stdio.h> #include <string.h> int main() { char myString[20] = "Hello, world!"; int length = strlen(myString); printf("The length of the string is: %d", length); return 0; }
#include <stdio.h>
#include <string.h>

int main() {
   char myString[20] = "Hello, world!";
   int length = strlen(myString);
   printf("The length of the string is: %d", length);
   return 0;
}

Αυτός ο κώδικας θα εκτυπώσει το μήκος της συμβολοσειράς “Hello, world!”, δηλαδή 13.

Η συνάρτηση strlen() επιστρέφει το μήκος μιας συμβολοσειράς. Ας δούμε ένα παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <stdio.h>
#include <string.h>
int main() {
char myString[20] = "Hello, world!";
int length = strlen(myString);
printf("The length of the string is: %d", length);
return 0;
}
#include <stdio.h> #include <string.h> int main() { char myString[20] = "Hello, world!"; int length = strlen(myString); printf("The length of the string is: %d", length); return 0; }
#include <stdio.h>
#include <string.h>

int main() {
   char myString[20] = "Hello, world!";
   int length = strlen(myString);
   printf("The length of the string is: %d", length);
   return 0;
}

Αυτός ο κώδικας θα εκτυπώσει το μήκος της συμβολοσειράς “Hello, world!”, δηλαδή 13.

Η συνάρτηση sizeof() επιστρέφει το μέγεθος μιας μεταβλητής ή ενός πίνακα σε bytes. Όπως αναφέρατε, η sizeof() περιλαμβάνει και τον χαρακτήρα \0 που χρησιμοποιείται για να σηματοδοτήσει το τέλος της συμβολοσειράς, ενώ η συνάρτηση strlen() δεν τον υπολογίζει στο μήκος της συμβολοσειράς.

[adinserter block=”4″]

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

Ας δούμε ένα παράδειγμα για να καταλάβουμε τη διαφορά μεταξύ της συνάρτησης sizeof() και strlen():

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <stdio.h>
#include <string.h>
int main() {
char myString[] = "Hello";
int size = sizeof(myString);
int length = strlen(myString);
printf("The size of the string is: %d\n", size);
printf("The length of the string is: %d\n", length);
return 0;
}
#include <stdio.h> #include <string.h> int main() { char myString[] = "Hello"; int size = sizeof(myString); int length = strlen(myString); printf("The size of the string is: %d\n", size); printf("The length of the string is: %d\n", length); return 0; }
#include <stdio.h>
#include <string.h>

int main() {
    char myString[] = "Hello";
    int size = sizeof(myString);
    int length = strlen(myString);
    printf("The size of the string is: %d\n", size);
    printf("The length of the string is: %d\n", length);
    return 0;
}

Η παραπάνω εφαρμογή θα εκτυπώσει:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
The size of the string is: 6
The length of the string is: 5
The size of the string is: 6 The length of the string is: 5
The size of the string is: 6
The length of the string is: 5

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

Για να συνενώσετε (concatenate) δύο συμβολοσειρές στη C, μπορείτε να χρησιμοποιήσετε τη συνάρτηση strcat().

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

Δείτε ένα παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[20] = " World";
strcat(str1, str2);
printf("%s\n", str1);
return 0;
}
#include <stdio.h> #include <string.h> int main() { char str1[20] = "Hello"; char str2[20] = " World"; strcat(str1, str2); printf("%s\n", str1); return 0; }
#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello";
    char str2[20] = " World";
    strcat(str1, str2);
    printf("%s\n", str1);
    return 0;
}

Η παραπάνω εφαρμογή θα εκτυπώσει:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Hello World
Hello World
Hello World

Παρατηρούμε ότι η συνάρτηση strcat() προσθέτει τη δεύτερη συμβολοσειρά (” World”) στο τέλος της πρώτης συμβολοσειράς (“Hello”), και εκτυπώνει την πλήρη συμβολοσειρά “Hello World”.

Για να αντιγράψετε την τιμή μιας συμβολοσειράς σε μια άλλη, μπορείτε να χρησιμοποιήσετε τη συνάρτηση strcpy().

[adinserter block=”5″]

Η συνάρτηση strcpy() παίρνει δύο ορίσματα: τη συμβολοσειρά προορισμού και τη συμβολοσειρά πηγής. Η τιμή της συμβολοσειράς πηγής αντιγράφεται στη συμβολοσειρά προορισμού. Η συμβολοσειρά προορισμού πρέπει να έχει αρκετό χώρο για να χωρέσει τη συμβολοσειρά πηγής, συμπεριλαμβανομένου του τελικού χαρακτήρα \0 που σηματοδοτεί το τέλος της συμβολοσειράς.

Δείτε ένα παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[20];
strcpy(str2, str1);
printf("%s\n", str2);
return 0;
}
#include <stdio.h> #include <string.h> int main() { char str1[20] = "Hello"; char str2[20]; strcpy(str2, str1); printf("%s\n", str2); return 0; }
#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello";
    char str2[20];
    strcpy(str2, str1);
    printf("%s\n", str2);
    return 0;
}

Η παραπάνω εφαρμογή θα εκτυπώσει:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Hello
Hello
Hello

Παρατηρούμε ότι η συνάρτηση strcpy() αντιγράφει την τιμή της συμβολοσειράς προέλευσης (“Hello”) στη συμβολοσειρά προορισμού (str2), και εκτυπώνει τη συμβολοσειρά προορισμού.

Για να συγκρίνετε δύο αλφαριθμητικά στη C, μπορείτε να χρησιμοποιήσετε τη συνάρτηση strcmp().

Η συνάρτηση αυτή επιστρέφει την τιμή 0 εάν τα δύο αλφαριθμητικά είναι ίσα, διαφορετικά επιστρέφει μια τιμή που δεν είναι 0.

Ας δούμε ένα παράδειγμα χρησιμοποιώντας τη συνάρτηση strcmp() στη C:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[20] = "World";
if (strcmp(str1, str2) == 0) {
printf("The two strings are equal\n");
}
else {
printf("The two strings are not equal\n");
}
return 0;
}
#include <stdio.h> #include <string.h> int main() { char str1[20] = "Hello"; char str2[20] = "World"; if (strcmp(str1, str2) == 0) { printf("The two strings are equal\n"); } else { printf("The two strings are not equal\n"); } return 0; }
#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello";
    char str2[20] = "World";
    
    if (strcmp(str1, str2) == 0) {
        printf("The two strings are equal\n");
    }
    else {
        printf("The two strings are not equal\n");
    }
    
    return 0;
}

Σε αυτό το παράδειγμα, έχουμε δηλώσει δύο αλφαριθμητικά str1 και str2. Στη συνέχεια, χρησιμοποιούμε τη συνάρτηση strcmp() για να συγκρίνουμε τα δύο αλφαριθμητικά. Η συνθήκη if ελέγχει εάν η τιμή που επιστρέφει η συνάρτηση strcmp() είναι ίση με το μηδέν. Εάν ναι, τότε τα δύο αλφαριθμητικά είναι ίσα και εκτυπώνεται το μήνυμα “Τα δύο αλφαριθμητικά είναι ίσα”. Διαφορετικά, εκτυπώνεται το μήνυμα “Τα δύο αλφαριθμητικά δεν είναι ίσα”.

Αν τρέξουμε αυτόν τον κώδικα, το αποτέλεσμα θα είναι “Τα δύο αλφαριθμητικά δεν είναι ίσα”, διότι τα αλφαριθμητικά “Hello” και “World” είναι διαφορετικά.

Δωρεα μεσω Paypal

Για την κάλυψη αναγκών φιλοξενίας και δημιουργίας περιεχομένου.

κατηγοριες μαθηματων

Ιστορικο ενοτητων

top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων