Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

Σχετικά έγγραφα
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

Δομημένος Προγραμματισμός

Μεθόδων Επίλυσης Προβλημάτων

Διδάσκων: Παναγιώτης Ανδρέου

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διάλεξη 8η: Αλφαριθμητικά (strings)

Διδάσκων: Παναγιώτης Ανδρέου

Η γλώσσα προγραμματισμού C

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Διαδικασιακός Προγραμματισμός

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός (ΤΛ1006)

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Προγραμματισμός Ι (ΗΥ120)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Εισαγωγή στον Προγραμματισμό

Προγραµµατισµός Ι Αλφαριθµητικά Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι 1 Νικόλαος Δ.

Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός (ΤΛ1006)

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Βαθμός Σχόλια. lab6 PASS PASS. - Πολύ καλή δουλειά, αλλά προσπάθησε να κάνεις την άσκηση χρησιµοποιώντας συναρτήσεις από το string.

Χpήσιµες Βιβλιοθήκες της γλώσσας C

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

scanf() scanf() stdin scanf() printf() int float double %lf float

Ρρογραμματιςμόσ Μεκόδων Επίλυςθσ Ρροβλθμάτων. 18. Αλφαριθμητικά. Ιωάννθσ Κατάκθσ. ΕΡΛ 032: Ρρογραμματιςμόσ Μεκόδων Επίλυςθσ Ρροβλθμάτων

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Διαδικασιακός Προγραμματισμός

Διδάσκων: Παναγιώτης Ανδρέου

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

Τύποι Δεδομένων Είσοδος/Έξοδος

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Διαδικασιακός Προγραμματισμός

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Ανάπτυξη και Σχεδίαση Λογισμικού

Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 19. Αλφαριθμητικά II. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Διδάσκων: Παναγιώτης Ανδρέου

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

Δομημένος Προγραμματισμός (ΤΛ1006)

Επανάληψη για τις Τελικές εξετάσεις

Προγραμματισμός Ι (ΗΥ120)

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

char name[5]; /* define a string of characters */

Επεξεργασία κειμένου και συμβολοσειρών σε C

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Προγραμματισμός Υπολογιστών με C++

Διάλεξη 7: Συμβολοσειρές, Δείκτες και Παραδείγματα

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Διδάσκων: Παναγιώτης Ανδρέου

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

Μεθόδων Επίλυσης Προβλημάτων

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Αλφαριθμητικά, πίνακες και δείκτες

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Προγραμματισμός Ι Εργαστήριο 9ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 9 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Εισαγωγή στον δομημένο προγραμματισμό

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Βαθμός Σχόλια. lab PASS 1194 PASS 1238 PASS 1239 PASS

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Προγραμματισμός Η/Υ. Ενότητα 6: Πίνακες και Δείκτες

Εργαστήριο 9: Αρχεία

lab7 PASS -Δεν έχεις καθόλου σχόλια! Διάβασε το φυλλάδιο. PASS -Πολύ καλή εργασία µε σωστά και επεξηγηµατικά σχόλια. -Πρόσεξε την στοίχισή σου!

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Μεθόδων Επίλυσης Προβλημάτων

Sheet2 Α.Μ FAIL. οριακό PASS. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Sheet1_2. - Δεν απελευθερώνεις τη δυναµικά δεσµευµένη µνήµη. - Η έξοδος του προγράµµατός σου δεν είναι ακριβώς όπως ζητούσε η άσκηση.

Ενδεικτική περιγραφή μαθήματος

Συµβολοσειρές - Strings

lab10grades - Το αποτέλεσµα της τοµής θα έπρεπε να εµφανίζετε µέσα σε εισαγωγικά "Helo".

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Δομημένος Προγραμματισμός (ΤΛ1006)

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού

Αρχές Προγραμματισμού

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός H/Y Ενότητα 3: Πίνακες αριθμών και χαρακτήρων. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16)

Transcript:

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Εισαγωγικές Έννοιες σε Strings - Πίνακες από Strings - Συναρτήσεις Βιβλιοθήκης <string.h> - Υλοποίηση Συναρτήσεων Βιβλιοθήκης Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 1

Συμβολοσειρές (Strings) Μία συμβολοσειρά (string)είναι μία ακολουθία αλφαριθμητικών χαρακτήρων, σημείων στίξης, π.χ. Hello 121212 *Apple#123*% Έχουμε ήδη χρησιμοποιήσει σε διάφορες περιπτώσεις τα strings π.χ.,printf( Hello ); Μέχρι τώρα όμως, δεν αναφερόμασταν στα strings με την χρήση μεταβλητών. Στην C δεν υπάρχει ο τύπος string (όπως το float, intκαι char), αλλά αυτός υλοποιείται ως πίνακες χαρακτήρων Επαναλαμβάνουμε τα stringsγιατί θα μας δώσει την δυνατότητα να δουλέψουμε με την απλούστερη δομή δεδομένων: τον πίνακα, αλλά και για λόγους επανάληψης Ορισμός String: Ένας πίνακας από χαρακτήρες που τελειώνει με τον χαρακτήρα NULL \0, π.χ. Hello\0 (Προσοχή το \0 δεν φαίνεται στην οθόνη) H E L L O \0 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 2

Αρχικοποίηση string Υπάρχουν διάφοροι τρόποι να ορίσουμε ένα String στην C, ανάλογα με το αν γνωρίζουμε το string προτού την μεταγλώττιση ή όχι. A. Αρχικοποίηση (γνωρίζοντας εκ των πρότερων το String) char msg[]= Hello ; Δημιουργεί το: Άλλοι τρόποι: Σωστό char msg[6]; msg[0]='h'; msg[1]='e'; msg[5] = '\0';!!! Λάθος!!! char msg[ ] ={ H, e, l, l, o }; Πίνακας χαρακτήρων που δεν τελειώνει σε \0. Επομένως δεν είναι String. Αν κάποιος εκτελέσει printf( %s, msg); Τότε στην οθόνη θα δείξει Hello??? π.χ, msg=hello C H E L L O \0 Σωστό char msg[ ]={ H, e, l, l, o, \0 }; Σωστό char msg[6]={ H, e, l, l, o, \0 }; Σωστό (αλλά σπάταλο!) char msg[40]= Hello ;!!! Λάθος!!! char msg[5]= {'H','e','l','l','o','\0'}; Δεν δεσμεύουμε αρκετό χώρο και δημιουργείται buffer overflow ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3

Αρχικοποίηση string Ας δούμε πως μοιάζουν εικονικά οι ακόλουθοι ορισμοί char msg[10]= Hello ; Size (sizeof(msg))= 10 String Size (strlen(msg)) = 5 0 1 2 3 4 5 6 7 8 H E L L O \0??? 9? char msg[]= Hello ; Size = 6 String Size = 5 char c = H ; Ο χαρακτήρας Η βρίσκεται κάπου στη μνήμη char c[]= H ; Τοstring H βρίσκεται κάπου στη μνήμη 0 1 2 3 4 5 H E L L O \0 0 1 2 3 4 5??? H?? 0 1 2 3 4 5? Η \0??? char c= H ;!!! Λάθοςστην μεταγλώττιση!!! ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4

Αρχικοποίηση string B. Αρχικοποίηση (ΜΗ γνωρίζοντας εκ των προτέρων το String) Ερώτηση: Πόσο χώρο πρέπει να δεσμεύσουμε; Απάντηση:Αρκετό για να χωρέσει διάφορα δεδομένα εισόδου που πρόκειται να εισάγουμε. π.χ., αν πρόκειται να αποθηκεύσουμε κάποιο όνομα τότε συνήθως 20-30 χαρακτήρες φαίνεται να αρκούν. Στην πραγματικότητα χρησιμοποιούμε δυναμική δέσμευση μνήμης, η οποία μας επιτρέπει να δεσμεύσουμε τον απαιτούμενο χώρο κατά την διάρκεια εκτέλεσης του προγράμματος (θα μιλήσουμε για αυτό το θέμα στην συνέχεια του μαθήματος)! Προτού δούμε ένα παράδειγμα, ας δούμε πως διαβάζουμε stringsαπό τον χρήστη και πως τα εκτυπώνουμε. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 5

Ανάγνωση/Εκτύπωση string Η μέθοδος printf τυπώνει στην πρότυπη έξοδο (συνήθως η οθόνη) Παραδείγματα: int x=5; printf( %d, x); //Διαβάζω ένα ακέραιο αριθμό char name[20]= Hello ; printf( %s, name); Η μέθοδος scanfδιαβάζει από την πρότυπη είσοδο (συνήθως το πληκτρολόγιο) διάφορους τύπου δεδομένων (π.χ., ακέραιους, συμβολοσειρές, κ.ο.κ. Παραδείγματα: int x; scanf( %d, &x); //Διαβάζω ένα ακέραιο αριθμό char name[20]; scanf( %s, &name); //Διαβάζω μία συμβολοσειρά. Το & δεν χρειάζεται γιατί η μεταβλητή name είναι πίνακας. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 6

Ανάγνωση/Εκτύπωση string Ερώτηση 1: Τι θα γίνει σε αυτή την περίπτωση; Ο χρήστης δίνει σαν είσοδο Hello!!! Λάθοςστην εκτέλεση. Δεν υπάρχει χώρος για να αποθηκευτεί το \0!!! Αποφυγή λάθους χρησιμοποιώντας τον διαμορφωτή scanf("%4s", name); Ερώτηση 2: Τι θα γίνει σε αυτή την περίπτωση; Ο χρήστης δίνει σαν είσοδο This is a test!!! Λογικό Λάθος. Το <space> δηλώνει ότι το string έχει τελειώσει. Θα τυπωθεί μόνο η λέξη This!!! Ερώτηση 3: Τι θα γίνει με το υπόλοιπο string; Το is a test παραμένει στη μνήμητης εισόδου! Αποφυγή λάθους χρησιμοποιώντας την μέθοδο fflush(stdin); μετά από κάθε διάβασμα. Για εισαγωγή συμβολοσειράς με κενά χρησιμοποιείται ηfgets(name, sizeof(name), stdin); Ερώτηση 1 char name[5]; scanf("%s", name); 0 1 2 3 4 H E L L O Ερώτηση 2 char name[20]; scanf("%s", name); printf("%s\n", name); Ερώτηση 3 char name[20]; scanf("%s", name); printf("%s\n", name); scanf("%s", name); printf("%s\n", name); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 7

Πίνακες από Strings Είπαμε ότι το String είναι ένας μονοδιάστατος πίνακας από χαρακτήρες που τελειώνει σε \0. Μπορούμε να έχουμε πίνακες από Strings; ΝΑΙ π.χ. Λίστα με ονόματα, ημέρες, κτλ. Παραδείγματα char names[num_students][name_len]; char weekdays[7][10]= { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; 0 1 6 0 1 2 3 4 5 6 7 8 M o n d a y \0??? T u e s d a y \0?? S u n d a y \0??? 9 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 8

Συχνές Λειτουργίες με Strings Το αρχείο επικεφαλίδα (header file), <string.h> παρέχει συναρτήσεις για χειρισμό strings Υπάρχουν κάποιες συναρτήσεις που είναι πολύ συχνές με Strings: Μήκος(strlen): Επιστρέφει το μήκος ενός string Αντιγραφή(strcpy): Αντιγράφει ένα string σε κάποιο άλλο Συνένωση(strcat): Τοποθετεί ένα stringσυμβολοσειράς στο τέλος κάποιου άλλου Σύγκριση(strcmp): συγκρίνει δύο strings Υπάρχουν επίσης κάποιες συναρτήσεις που δεν είναι πολύ συχνές Αναζήτηση(strstr): Επιστρέφει την αφετηρία ενός stringπου βρίσκεται εντός ενός άλλου Αναζήτηση(strchr): Επιστρέφειτην αφετηρία ενός charπου βρίσκεται εντός ενός string Κατακερματισμός (strtok):επιστρέφει ένα δείκτη στο τελευταίο τμήμα (token) που έχει βρεθεί σε ένα string βάση κάποιων οριοθετών(delimiters) Για εξάσκηση, θα υλοποιήσουμε μόνοι μας κάποιες συναρτήσεις ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 9

Η συνάρτηση <strlen> Επιστρέφει το μήκος ενός string Υπογραφή: size_t strlen( const char * str) Παράμετρος εξόδου: size_t = unsigned long int Παράδειγμα: char msg[10]= Hello ; sizeof() ΠΡΟΣΟΧΗ: Η συνάρτηση strlenδεν μας λέει το μέγιστο μέγεθος του string. Αυτό είναι 10 χαρακτήρες και το ξέρουμε πριν το compileή με printf("%d", sizeof(msg)); Ερώτηση 1: Τι θα γίνει σε αυτή την περίπτωση; printf("%s\n", strlen("")); Δεν επιτρέπεται η αλλαγή του str strlen() 0 1 2 3 4 5 6 7 8 H E L L O \0??? 9? ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 10

Άσκηση: Υλοποίηση συνάρτησης <strlen> Υπογραφή: size_t mystrlen( constchar * str) Αλγόριθμος: Αρχικοποίησε κάποιο μετρητή <c> σε 0. Διάβασε ένα-ένα χαρακτήρα από το string <str> μέχρι να βρεις τον ειδικό χαρακτήρα \0. Σε κάθε βήμα αύξησε το μετρητή <c>κατά 1. Επέστρεψε το <c> σαν αποτέλεσμα int mystrlen( const char * str){ int c=0; while(str[c]!='\0'){ c++; } return c; } int mystrlen( const char * str){ int c=0; while(str[c++]!='\0'); // OR while(str[c++]); } return --c; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 11

Η συνάρτηση <strcpy> Αντιγράφει ένα string σε κάποιο άλλο Υπογραφή: char* strcpy( char* destination, constchar * source ); Παράμετρος εξόδου: char* = destination Παράδειγμα: char s1[]="hello"; char s2[7]; strcpy(s2,s1); ΠΡΙΝ s1 0 1 2 3 4 5 6 H E L L O \0? printf("%s\n", s2); s2??????? ΜΕΤΑ s2 0 1 2 3 4 5 6 H E L L O \0? ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 12

Άσκηση: Υλοποίηση συνάρτησης <strcpy> Υπογραφή: void mystrcpy( char* dest, const char* source ); Αλγόριθμος: Αρχικοποίησε κάποιο μετρητή <i> σε 0. Διάβαζε τους χαρακτήρες και κάθε φορά αντέγραψε τον χαρακτήραπου βρίσκεται στη θέση [i]από το string <source> στη θέση [i] στο string <dest> μέχρι να βρεις τον ειδικό χαρακτήρα \0. Σε κάθε βήμα το αύξησε το μετρητή <i>κατά 1. void mystrcpy( char * dest, const char * source ){ int i=0; while(dest[i]!='\0'){ dest[i]=source[i]; i++; } } void mystrcpy( char * dest, const char * source ){ int i=0; while(dest[i]=source[i++]); } ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 13

Η συνάρτηση <strcat> Αντιγράφει ένα string σε κάποιο άλλο Υπογραφή: char* strcat( char* destination, constchar * source ); Παράμετρος εξόδου: char* = destination Παράδειγμα: s1 char s1[15]="this"; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 T h i s \0?????????? strcat(s1, " is"); strcat(s1, " a"); strcat(s1, " test"); T h i s i s \0??????? T h i s i s a \0????? T h i s i s a t e s t \0 printf("%s\n", s1); ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 14

Άσκηση: Υλοποίηση συνάρτησης <strcat> Υπογραφή: void mystrcat( char* dest, const char* source ); Αλγόριθμος: Αρχικοποίησε κάποιο μετρητή <i> σε 0. Βρες τη θέση <k> όπου dest[k]= \0 Αντέγραψε κάθε χαρακτήρα που βρίσκεται στη θέση [i]από το string <source> στη θέση [i+k] στο string <dest>μέχρι να βρεις τον ειδικό χαρακτήρα \0. Σε κάθε βήμα αύξησε το μετρητή <i>κατά 1. void mystrcat( char * dest, const char * source ){ int i=0, k=0; while(dest[k]!='\0'){k++;} while(dest[i]!='\0'){ dest[i+k]=source[i]; i++; } } void mystrcat( char * dest, const char * source ){ int i=0, k=0; while(dest[k++]) k--; while((dest[i+k]=source[i++]); } ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 15

Η συνάρτηση <strcmp> Συγκρίνει ένα string με κάποιο άλλο Υπογραφή: int* strcmp(constchar* str1, constchar * str2 ); Παράμετρος εξόδου: int 0: τα strings str1 και str2είναι ίδια >0: Ο πρώτος χαρακτήρας που δεν είναι ίδιος στο string str1 είναι μεγαλύτερος από το χαρακτήρα με ίδια θέση στο str2 <0: αντίστροφα με το πιο πάνω Παραδείγματα: strcmp("apple", "Android"); 1 strcmp("android", "Apple"); -1 strcmp("android", "Android"); 0 strcmp("android", "android"); -1 Η σύγκριση γίνεται βάση του πίνακα ASCII ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 16