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, οι συμβολοσειρές αναπαριστούνται ως πίνακες χαρακτήρων (character arrays) με τον τελευταίο χαρακτήρα να είναι ο χαρακτήρας τερματισμού συμβολοσειράς ('\0'). Η σύμβαση για τον ορισμό μιας συμβολοσειράς στη C είναι η ακόλουθη:

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

Στο παραπάνω παράδειγμα, η μεταβλητή str είναι ένας πίνακας χαρακτήρων που περιέχει τη συμβολοσειρά “Hello, World!”. Ο τερματισμός της συμβολοσειράς γίνεται με τον ειδικό χαρακτήρα '\0' που προστίθεται αυτόματα από τον μεταγλωττιστή.

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
char str[] = "Hello, World!";
printf("Message: %s", str);
char str[] = "Hello, World!"; printf("Message: %s", str);
char str[] = "Hello, World!";
printf("Message: %s", str);

Η έξοδος στην οθόνη θα είναι:

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

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

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

Για να εξαγάγετε τη συμβολοσειρά, μπορείτε να χρησιμοποιήσετε τη συνάρτηση 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
#include <stdio.h>
int main() {
char greetings[6] = "Hello"; // Δημιουργία πίνακα χαρακτήρων με την αρχική τιμή "Hello"
greetings[0] = 'J'; // Αλλαγή του πρώτου χαρακτήρα σε 'J'
printf("The new string is: %s", greetings); // Εκτύπωση του νέου πίνακα χαρακτήρων
return 0;
}
#include <stdio.h> int main() { char greetings[6] = "Hello"; // Δημιουργία πίνακα χαρακτήρων με την αρχική τιμή "Hello" greetings[0] = 'J'; // Αλλαγή του πρώτου χαρακτήρα σε 'J' printf("The new string is: %s", greetings); // Εκτύπωση του νέου πίνακα χαρακτήρων return 0; }
#include <stdio.h>

int main() {
    char greetings[6] = "Hello";  // Δημιουργία πίνακα χαρακτήρων με την αρχική τιμή "Hello"
    greetings[0] = 'J';  // Αλλαγή του πρώτου χαρακτήρα σε 'J'
    printf("The new string is: %s", greetings);  // Εκτύπωση του νέου πίνακα χαρακτήρων
    
    return 0;
}

Ο παραπάνω κώδικας σε C αλλάζει τον πρώτο χαρακτήρα του πίνακα greetings από ‘H’ σε ‘J’ και στη συνέχεια εκτυπώνει τον νέο πίνακα χαρακτήρων. Ο πίνακας greetings περιλαμβάνει 6 θέσεις μνήμης για τους χαρακτήρες του κειμένου “Hello”, με την τελευταία θέση να προστίθεται για τον τερματισμό του πίνακα με έναν ειδικό χαρακτήρα null. Ο κώδικας εκτυπώνει τη νέα τιμή του πίνακα greetings, που είναι “Jello”, με τη χρήση της συνάρτησης printf.

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

Παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#include <stdio.h>
int main() {
char greetings[6] = "Hello"; // Δήλωση και αρχικοποίηση ενός πίνακα χαρακτήρων με το κείμενο "Hello"
int i;
for (i = 0; i < 5; i++) {
printf("%c\n", greetings[i]); // Εκτύπωση του κάθε χαρακτήρα του πίνακα χρησιμοποιώντας τη συνάρτηση printf
}
return 0; // Επιστροφή της τιμής 0 ως ένδειξη επιτυχίας του προγράμματος
}
#include <stdio.h> int main() { char greetings[6] = "Hello"; // Δήλωση και αρχικοποίηση ενός πίνακα χαρακτήρων με το κείμενο "Hello" int i; for (i = 0; i < 5; i++) { printf("%c\n", greetings[i]); // Εκτύπωση του κάθε χαρακτήρα του πίνακα χρησιμοποιώντας τη συνάρτηση printf } return 0; // Επιστροφή της τιμής 0 ως ένδειξη επιτυχίας του προγράμματος }
#include <stdio.h>

int main() {
    char greetings[6] = "Hello"; // Δήλωση και αρχικοποίηση ενός πίνακα χαρακτήρων με το κείμενο "Hello"
    int i;
    for (i = 0; i < 5; i++) {
        printf("%c\n", greetings[i]); // Εκτύπωση του κάθε χαρακτήρα του πίνακα χρησιμοποιώντας τη συνάρτηση printf
    }

    return 0; // Επιστροφή της τιμής 0 ως ένδειξη επιτυχίας του προγράμματος
}

Ο κώδικας αυτός εκτυπώνει τους χαρακτήρες του πίνακα greetings έναν προς έναν. Αρχικά, δηλώνονται ο πίνακας greetings που περιέχει το κείμενο “Hello” και η μεταβλητή i. Στη συνέχεια, χρησιμοποιείται ο βρόχος for για να επαναληφθεί η εκτέλεση του κομματιού κώδικα μέσα στον βρόχο για τις τιμές του i από 0 έως 4. Κάθε φορά, η συνάρτηση printf εκτυπώνει τον χαρακτήρα του πίνακα greetings που αντιστοιχεί στην τρέχουσα θέση του i. Τελικά, η εκτέλεση τερματίζεται και το πρόγραμμα επιστρέφει την τιμή 0, υποδεικνύοντας επιτυχή ολοκλήρωση.

Αν εκτελέσετε τον παραπάνω κώδικα σε ένα περιβάλλον που υποστηρίζει τη γλώσσα C, το αποτέλεσμα στην οθόνη θα είναι:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
H
e
l
l
o
H e l l o
H
e
l
l
o

Κάθε χαρακτήρας του πίνακα greetings θα εκτυπωθεί σε μια νέα γραμμή, καθώς ο κώδικας περιλαμβάνει την εντολή printf("%c\n", greetings[i]);, όπου %c αναφέρεται σε έναν χαρακτήρα και \n προκαλεί μια νέα γραμμή μετά από κάθε εκτύπωση.

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

Παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
char greetings[6] = {'H', 'e', 'l', 'l', 'o', '<pre class="EnlighterJSRAW" data-enlighter-language="c" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">char greetings[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
printf("The string is: %s", greetings);</pre>'};
printf("The string is: %s", greetings);
char greetings[6] = {'H', 'e', 'l', 'l', 'o', '<pre class="EnlighterJSRAW" data-enlighter-language="c" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">char greetings[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; printf("The string is: %s", greetings);</pre>'}; printf("The string is: %s", greetings);
char greetings[6] = {'H', 'e', 'l', 'l', 'o', '
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);
'}; 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', '<pre class="EnlighterJSRAW" data-enlighter-language="c" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">char str1[] = "Hello World";
char str2[12] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0'};</pre>'};
char str1[] = "Hello World"; char str2[12] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '<pre class="EnlighterJSRAW" data-enlighter-language="c" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">char str1[] = "Hello World"; char str2[12] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0'};</pre>'};
char str1[] = "Hello World";
char str2[12] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '
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 τους ειδικούς χαρακτήρες στις συμβολοσειρές, μπορείτε να χρησιμοποιήσετε τον χαρακτήρα κάθετης γραμμής (backslash, ) ακολουθούμενο από έναν χαρακτήρα που καθορίζει τη σημασία του ειδικού χαρακτήρα. Ορισμένοι από τους συνηθέστερους ειδικούς χαρακτήρες στη γλώσσα C είναι:

  • \n: Νέα γραμμή (newline)
  • \t: Καρτέλα (tab)
  • \b: Πίσω κενό (backspace)
  • \r: Επιστροφή κέρσορα (carriage return)
  • \": Διπλά εισαγωγικά (double quote)
  • \': Μονά εισαγωγικά (single quote)
  • \\: Κάθετη γραμμή (backslash)

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

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

Στη γλώσσα C, ο χαρακτήρας \ (backslash) χρησιμοποιείται ως χαρακτήρας διαφυγής (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 θα αντιληφθεί ότι ο μοναδικός χαρακτήρας εισαγωγικών στη συμβολοσειρά δεν αποτελεί το τέλος της συμβολοσειράς, αλλά είναι ένας χαρακτήρας της συμβολοσειράς.

Το string.h είναι ένα από τα βασικά 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;
}

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

  1. Οι δηλώσεις #include <stdio.h> και #include <string.h> εισάγουν τις απαραίτητες βιβλιοθήκες για την είσοδο/έξοδο και την επεξεργασία συμβολοσειρών αντίστοιχα.
  2. Η συνάρτηση main είναι η κύρια συνάρτηση του προγράμματος που περιέχει τον εκτελέσιμο κώδικα.
  3. Ορίζεται ένας πίνακας χαρακτήρων myString με χωρητικότητα 20 και αρχική τιμή “Hello, world!”.
  4. Η συνάρτηση strlen χρησιμοποιείται για να υπολογιστεί το μήκος της συμβολοσειράς myString και αποθηκεύεται στη μεταβλητή length.
  5. Η συνάρτηση printf χρησιμοποιείται για να εκτυπωθεί το μήνυμα “The length of the string is: ” ακολουθούμενο από την τιμή της μεταβλητής length.
  6. Το πρόγραμμα τερματίζει με την εντολή return 0;, η οποία υποδεικνύει ότι το πρόγραμμα ολοκληρώθηκε με επιτυχία.

Το αποτέλεσμα που θα εμφανιστεί στην οθόνη είναι:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
The length of the string is: 13
The length of the string is: 13
The length of the string is: 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!"; // Δημιουργία ενός πίνακα χαρακτήρων με την αρχική τιμή "Hello, world!"
int length = strlen(myString); // Υπολογισμός του μήκους του πίνακα χαρακτήρων με τη χρήση της συνάρτησης strlen()
printf("The length of the string is: %d", length); // Εκτύπωση του μήκους του πίνακα χαρακτήρων
return 0;
}
#include <stdio.h> #include <string.h> int main() { char myString[20] = "Hello, world!"; // Δημιουργία ενός πίνακα χαρακτήρων με την αρχική τιμή "Hello, world!" int length = strlen(myString); // Υπολογισμός του μήκους του πίνακα χαρακτήρων με τη χρήση της συνάρτησης strlen() printf("The length of the string is: %d", length); // Εκτύπωση του μήκους του πίνακα χαρακτήρων return 0; }
#include <stdio.h>
#include <string.h>

int main() {
   char myString[20] = "Hello, world!"; // Δημιουργία ενός πίνακα χαρακτήρων με την αρχική τιμή "Hello, world!"
   int length = strlen(myString); // Υπολογισμός του μήκους του πίνακα χαρακτήρων με τη χρήση της συνάρτησης strlen()
   printf("The length of the string is: %d", length); // Εκτύπωση του μήκους του πίνακα χαρακτήρων
   return 0;
}

Ο παραπάνω κώδικας γράφει το μήνυμα “Hello, world!” σε έναν πίνακα χαρακτήρων myString. Στη συνέχεια, χρησιμοποιεί τη συνάρτηση strlen() για να υπολογίσει το μήκος του πίνακα myString. Το μήκος αποθηκεύεται στη μεταβλητή length. Τέλος, η εντολή printf() εκτυπώνει το μήκος του πίνακα με τη χρήση του μηνύματος “The length of the string is: ” που ακολουθείται από την τιμή της μεταβλητής length.

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

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

[adinserter block=”4″]

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

Ας δούμε ένα παράδειγμα για να καταλάβουμε τη διαφορά μεταξύ της συνάρτησης 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"; // Δήλωση ενός πίνακα χαρακτήρων με την αρχική τιμή "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"; // Δήλωση ενός πίνακα χαρακτήρων με την αρχική τιμή "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"; // Δήλωση ενός πίνακα χαρακτήρων με την αρχική τιμή "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;
}

Ο παραπάνω κώδικας γράφεται σε C και πραγματοποιεί τις εξής ενέργειες:

  1. Συμπεριλαμβάνει τις απαραίτητες βιβλιοθήκες για τη χρήση των συναρτήσεων printf και strlen.
  2. Δηλώνει έναν πίνακα χαρακτήρων με την αρχική τιμή “Hello”.
  3. Υπολογίζει το μέγεθος του πίνακα χαρακτήρων με τη χρήση της συνάρτησης sizeof.
  4. Υπολογίζει το μήκος του πίνακα χαρακτήρων με τη χρήση της συνάρτησης strlen.
  5. Εκτυπώνει το μέγεθος του πίνακα χαρακτήρων χρησιμοποιώντας τη συνάρτηση printf.
  6. Εκτυπώνει το μήκος του πίνακα χαρακτήρων χρησιμοποιώντας τη συνάρτηση printf.
  7. Επιστρέφει την τιμή 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;
}

Ο κώδικας αυτός σε γλώσσα C συνενώνει δύο πίνακες χαρακτήρων str1 και str2 χρησιμοποιώντας τη συνάρτηση strcat(). Η strcat() επικολλά το περιεχόμενο του str2 στο τέλος του str1. Στη συνέχεια, με τη χρήση της printf() εκτυπώνεται το συνενωμένο αποτέλεσμα str1.

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

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 που σηματοδοτεί το τέλος της συμβολοσειράς.

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

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

Παράδειγμα:

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"; // Δημιουργία ενός πίνακα χαρακτήρων str1 με χωρητικότητα 20 και αρχική τιμή "Hello"
char str2[20]; // Δημιουργία ενός κενού πίνακα χαρακτήρων str2 με χωρητικότητα 20
strcpy(str2, str1); // Αντιγραφή της περιεχομένης του πίνακα str1 στον πίνακα str2
printf("%s\n", str2); // Εκτύπωση του περιεχομένου του πίνακα str2
return 0; // Ολοκλήρωση του προγράμματος
}
#include <stdio.h> #include <string.h> int main() { char str1[20] = "Hello"; // Δημιουργία ενός πίνακα χαρακτήρων str1 με χωρητικότητα 20 και αρχική τιμή "Hello" char str2[20]; // Δημιουργία ενός κενού πίνακα χαρακτήρων str2 με χωρητικότητα 20 strcpy(str2, str1); // Αντιγραφή της περιεχομένης του πίνακα str1 στον πίνακα str2 printf("%s\n", str2); // Εκτύπωση του περιεχομένου του πίνακα str2 return 0; // Ολοκλήρωση του προγράμματος }
#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello"; // Δημιουργία ενός πίνακα χαρακτήρων str1 με χωρητικότητα 20 και αρχική τιμή "Hello"
    char str2[20]; // Δημιουργία ενός κενού πίνακα χαρακτήρων str2 με χωρητικότητα 20
    strcpy(str2, str1); // Αντιγραφή της περιεχομένης του πίνακα str1 στον πίνακα str2
    printf("%s\n", str2); // Εκτύπωση του περιεχομένου του πίνακα str2
    return 0; // Ολοκλήρωση του προγράμματος
}

Ο παραπάνω κώδικας σε C αντιγράφει το περιεχόμενο του πίνακα str1 στον πίνακα str2 χρησιμοποιώντας τη συνάρτηση strcpy. Η συνάρτηση strcpy αντιγράφει το περιεχόμενο ενός πίνακα χαρακτήρων σε έναν άλλο πίνακα. Στη συνέχεια, χρησιμοποιείται η συνάρτηση printf για να εκτυπωθεί το περιεχόμενο του πίνακα str2. Η εντολή printf("%s\n", str2) χρησιμοποιείται για την εκτύπωση ενός αλφαριθμητικού (πίνακα χαρακτήρων) στην οθόνη, με την αντικατάσταση του %s από το περιεχόμενο του πίνακα str2. Τέλος, ο κώδικας επιστρέφει την τιμή 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;
}

Ο παραπάνω κώδικας σε C πραγματοποιεί τη σύγκριση δύο συμβολοσειρών str1 και str2 χρησιμοποιώντας τη συνάρτηση strcmp από τη βιβλιοθήκη string.h.

Αρχικά, ορίζονται δύο πίνακες χαρακτήρων str1 και str2, οι οποίοι περιέχουν τις συμβολοσειρές “Hello” και “World” αντίστοιχα.

Έπειτα, γίνεται έλεγχος εάν οι δύο συμβολοσειρές είναι ίδιες με τη χρήση της συνάρτησης strcmp. Η strcmp επιστρέφει 0 αν οι δύο συμβολοσειρές είναι ίδιες.

Αν οι συμβολοσειρές είναι ίδιες, εκτυπώνεται το μήνυμα “The two strings are equal” στην οθόνη. Αν δεν είναι ίδιες, εκτυπώνεται το μήνυμα “The two strings are not equal”.

Στο τέλος, η main συνάρτηση επιστρέφει την τιμή 0, υποδηλώνοντας ότι ο κώδικας εκτελέστηκε χωρίς σφάλματα.

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

Αν οι δύο συμβολοσειρές str1 και str2 είναι ίδιες, τότε το αποτέλεσμα που θα εμφανιστεί στην οθόνη θα είναι:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
The two strings are equal
The two strings are equal
The two strings are equal

Αν οι δύο συμβολοσειρές δεν είναι ίδιες, τότε το αποτέλεσμα που θα εμφανιστεί στην οθόνη θα είναι:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
The two strings are not equal
The two strings are not equal
The two strings are not equal

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

19 Ιουνίου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων