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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

Δπαλάιεςε Αιθαξηζκεηηθέο εηξέο Υαξαθηήξσλ (Strings) (Γηάιεμε 2) Γηδάζθσλ: Γεκήηξεο Εετλαιηπνύξ

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

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

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

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

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

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

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

7. Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου

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

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

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

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

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

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες ( ιάλεξη 18) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

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

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

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

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

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

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

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

Εξοικ Εξ ε οικ ίωση ε με το το πρόγ ραμμα πρόγ DEV C++ Επικοι Επικ νωνία οι Χρήσ Χρήστη τη Υπολ Υπο ογισ λ τή

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

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

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Προγραμματισμό για ΗΜΥ

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα

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

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

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

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

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

Κεφάλαιο Πίνακες Ι. ( ιάλεξη 15) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

Επεξεργασία Αρχείων Κειµένου

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

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

C Programming EPL032 Maria Stavrinou Ioannou Εισαγωγή στη Γλώσσα C

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 2 Ο. Εισαγωγή στην C Εντολές εξόδου Εντολές εισόδου Μορφοποιητές ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Εισαγωγή στην γλώσσα προγραμματισμού C

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Transcript:

Κεφάλαιο 9.1-9.2 Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C Ένα string είναι μία ακολουθία αλφαριθμητικών χαρακτήρων, σημείων στίξης κτλ. Π.χ. Hello How are you? 121212 *Apple#123*% Σημερινή Διάλεξη 1. Εισαγωγικές Έννοιες σε Strings(Αρχικοποίηση, Ανάγνωση & Εκτύπωση) 2. Πίνακες από Strings 3. Συναρτήσεις Βιβλιοθήκης <string.h> Το άλλο Μάθημα Υλοποίηση Συναρτήσεων <string.h> 1

1) Strings στη C Έχουμε ήδη χρησιμοποιήσει σε διάφορες περιπτώσεις τα strings π.χ. printf( Hello ); Μέχρι τώρα όμως, δεν αναφερόμασταν στα strings με την χρήση μεταβλητών. Στην C δεν υπάρχει ο τύπος String (όπως το float, int και char), αλλά αυτός υλοποιείτε ως πίνακες χαρακτήρων Εισάγουμε τώρα την έννοια των strings (αντί πιο πριν), διότιτώραέχουμεκάποιαεμπειρίαμε πίνακες. 1.1) Αρχικοποίηση string Ορισμός String Ένας πίνακας από χαρακτήρες που τελειώνει με τον χαρακτήρα NULL \0, π.χ. Hello\0, Hi there\0, \0 (Προσοχή το \0 δεν φαίνεται στην οθόνη) Υπάρχουν διάφοροι τρόποι να ορίσουμε ένα String στην C, ανάλογα με το αν γνωρίζουμε το string προτού την μεταγλώττιση ή όχι. Α) Αρχικοποίηση (γνωρίζοντας εκ των πρότερων το String) char msg[ ]= Hello ; Δημιουργεί αυτόματα το: 0 1 2 3 4 5 H E L L O \0 2

1.1) Αρχικοποίηση string Συνίσταται αυτός ο ορισμός char msg[ ]= Hello αλλά υπάρχουν και άλλοι τρόποι Σωστό char msg[6]; msg[0] = 'H'; msg[1] = 'e'; msg[2] = 'l'; msg[3] = 'l'; msg[4] = 'o'; msg[5] = '\0'; Σωστό char msg[ ]={ H, e, l, l, o, \0 }; Σωστό char msg[6]={ H, e, l, l, o, \0 }; Σωστό char msg[40]= Hello Λάθος char msg[ ]={ H, e, l, l, o }; Λάθος char msg[5]={'h','e','l','l','o','\0'}; Δεν δεσμεύουμε αρκετό χώρο Πίνακαςχαρακτήρωνπουδεντελειώνεισε\0. Επομένως δεν είναι String Αν κάποιος εκτελέσει printf( %s, msg); Τότε στην οθόνη θα δείξει Hello??? 1.1) Αρχικοποίηση string Ας δούμε πως μοιάζουν εικονικά οι ακόλουθοι ορισμοί char msg[10]= Hello ; 0 1 2 3 4 5 H E L L O \0 6 7 8 9???? SIZE=10 Το? είναι απροσδιόριστος χαρακτήρας char msg[ ]= Hello ; 0 1 2 3 4 5 H E L L O \0 SIZE=6 3

1.1) Η διάφορα char και string Ας δούμε πως μοιάζουν εικονικά οι ακόλουθοι ορισμοί char c = H ; Ο χαρακτήρας H βρίσκεται κάπου στην μνήμη char c[ ]= H ; char c[ ]= H ; Το String H βρίσκεται κάπου στην μνήμη char c= H ; ΛΑΘΟΣ στην μεταγλώττιση 1.1) Αρχικοποίηση string Ερώτηση Τι γίνεται αν δεν ξέρουμε το String εκ των πρότερων? Πόσο χώρο πρέπει να δεσμεύσουμε? Απάντηση Αρκετόγιαναχωρέσειδιάφοραδεδομέναεισόδουπουπρόκειταινα εισάγουμε. π.χ. αν πρόκειται να αποθηκεύσουμε κάποιο όνομα τότε 20 χαρακτήρες φαίνεται να αρκούν. Στην πραγματικότητα χρησιμοποιούμε δυναμική δέσμευση μνήμης, η οποία μας επιτρέπει να δεσμεύσουμε τον απαιτούμενο χώρο κατά την διάρκεια εκτέλεσης του προγράμματος (αλλά δεν θα μιλήσουμε για αυτό το θέμα σε αυτό μάθημα). Προτού δούμε ένα παράδειγμα, ας δούμε πως διαβάζουμε strings από τον χρήστη και πως τα εκτυπώνουμε. 4

1.2) Ανάγνωση/Εκτύπωση String scanf ( %s, name) ΠΡΟΣΟΧΗ: Δεν χρησιμοποιείτε το &, γιατί το name είναι πίνακας. Θυμηθείτε ότι σε άλλους τύπους δεδομένων χρησιμοποιείτε π.χ. scanf( %d, &a); printf ( %s,name) 1.2) Ανάγνωση/Εκτύπωση string #include <stdio.h> int main() { char name[20]; scanf("%s", name); printf("%s", name); return 0; } Το printf γνωρίζει ότι ηεκτύπωσηπρέπει να γίνει μέχρι το \0 5

1.2) Ανάγνωση/Εκτύπωση string Πρόγραμμα που προσθέτει ένα «Α» στην θέση 5 και τερματίζει το string #include <stdio.h> int main() { char name[20]; scanf("%s", name); name[5]= Α ; name[6]= \0 ; printf("%s", name); return 0; } Πρίν Μετά 1.2) Ανάγνωση/Εκτύπωση string Μπορούμε βέβαια να διαβάσουμε πολλαπλά πεδία ταυτόχρονα int id; char tname[20]; scanf( %s %d,tname,&id); printf( You entered : %s and %d,tname, id); Αν δώσει κανείς σαν τιμή εισόδου MARIA 5 Τότε θα εκτυπωθεί «You entered : MARIA and 5» 6

Κοινό Λάθος (Ανάθεση σε String) Υποθέστε ότι έχουμε την πιο κάτω δήλωση char name [50]; Δενεπιτρέπετενααναθέσουμεέναstring από ένα άλλο (όπως στους υπόλοιπους τύπους) Π.χ. name= hydrogen ΛΑΘΟΣ (compile error) name={ h, y, d, r, o, \0 } ΛΑΘΟΣ (compile error) name[0]= h ; name[1]= y ;. ΟΡΘΟ Όμως, υπάρχει ευκολότερος τρόπος τον οποίο θα δούμε σε λίγο (με χρήση strcpy) 2) Πίνακες από Strings Είπαμε ότι το String είναι ένας μονοδιάστατος πίνακας από χαρακτήρες που τελειώνει σε \0. Μπορούμε να έχουμε πίνακες από Strings? ΝΑΙ π.χ. Λίστα με ονόματα, ημέρες, κτλ Παραδείγματα char names[num_students][name_len]; char weekdays[7][10]={ Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; 7

3) Συχνές λειτουργίες με string Υπάρχουν κάποιες λειτουργίες που είναι πολύ συχνές πάνω σε Strings. Παραδείγματα Compare: Σύγκριση δυο strings Copy: Αντιγραφή από ένα string σε άλλο ολόκληρο ή μέρος του. Concat: συνέδεσε δυο strings μαζί Substring: βρες αν υπάρχει το «abc» σε ένα string Η Βιβλιοθήκη <String.h> περιέχει συναρτήσεις για όλα τα πιο πάνω. Για εξάσκηση θα υλοποιήσουμε κάποιες από τις συναρτήσεις μόνοι μας 3) Η Βιβλιοθήκη string.h Το αρχείο επικεφαλίδα (header file), string.h παρέχει συναρτήσεις για χειρισμό strings Περιέχει Διάφορες Συναρτήσεις, πχ. strlen(s), υπολογίζει το μέγεθος του string strcpy(s1,s2), αντιγράφει το s2 στο s1 strcat(s1,s2), προσθέτει το s2 στο s1. strcmp(s1,s2), συγκρίνει το s1 με s2 και επιστρέφει θετική τιμή εάν s1 μεγαλύτερο (αλφαβητικά) από το s2, μηδέν αν είναι ίσα, και αρνητική τιμή εάν s1 μικρότερο από s2. (Η σύγκριση γίνεται βάση του πίνακα ASCII) 8

3) Η συνάρτησηstrlen() H συνάρτηση strlen μετρά το μέγεθος ενός String. π.χ. char msg[10]= HELLO 0 1 2 3 4 5 H E L L O \0 6 7 8 9???? printf( %d, strlen(msg)); Εκτυπώνει: 5. Δηλαδή τον αριθμό των χαρακτήρων έως το \0 Προσοχή!!! Tο strlen δεν μας λέει το Μέγιστο Μέγεθος του String. Αυτό είναι 10 χαρακτήρες και το ξέρουμε πριν το compile #include <stdio.h> #include <string.h> 3) Η συνάρτησηstrlen() int main() { char x[10] = "123456" ; printf("%d", strlen(x)); } Τυπώνει 6 9

3) Η συνάρτησηstrlen() Ξέρουμε ότι η strlen είναι έτοιμη συνάρτηση. Για εξάσκηση, θα την υλοποιήσουμε μόνοι μας ΑΣΚΗΣΗ Γράψετε την συνάρτηση int mystrlen(char c[]) που μέτρα το μέγεθος ενός string. Η συνάρτηση επιστρέφει το μήκος του string Tι θαεπιστρέψει? mystrlen( abc ) => 3 char x[10] = 123456 ; mystrlen(x); => 6 mystrlen( abc abc ) => 7 3) Η συνάρτησηstrlen() Αλγόριθμος Διάβασε το string από την αρχή μέχρι να βρεις το \0. Σε κάθε βήμα αύξησε κάποιο μετρητή κατά 1. name Ερώτηση Γιατί δεν μπορούμε να πάμε κατευθείαν στο τέλος του String (γιαναβρούμεκατευθείαντο μέγεθος)? 10

#include <stdio.h> int mystrlen (char s[]) { int i=0; while (s[i]!= '\0') i++; return i; } int main() { char x[10] = "123456" ; printf("%d", mystrlen(x)); } 3) Η συνάρτησηstrlen() 11