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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

είκτες και Πίνακες (2)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΠΛ 032.3: Προγραµµατισµός ΜεθόδωνΕπίλυσηςΠροβληµάτων

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

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

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

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

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

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

H ΓΛΩΣΣΑ C. Μάθηµα 16: Είσοδος/Έξοδος: Συναρτήσεις Eξόδου. ηµήτρης Ψούνης

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

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

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

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

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

Κεφάλαιο : Επαναλήψεις (oι βρόχος While) ( ιάλεξη 9) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

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

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

Κεφάλαιο : Εισαγωγή στην C. ( ιαλέξεις 3-4) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

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

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ ΤΟΥΣ

H ΓΛΩΣΣΑ C. Μάθηµα 7: Πίνακες. ηµήτρης Ψούνης

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Συμβολοσειρές, Δείκτες και Παραδείγματα (Κεφάλαιο 13, KNK-2ED)

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Προγραμματισμός Ι. Θεματική ενότητα 6: Πίνακες αλφαριθμητικά

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

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

Transcript:

Κεφάλαιο 9.1-9.2 Αλφαριθµητικές Σειρές Χαρακτήρων (Strings) ( ιάλεξη 19) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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 ; ηµιουργεί αυτόµατα το:

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 ; SIZE=10 Το? είναι απροσδιόριστος χαρακτήρας char msg[ ]= Hello ; SIZE=6

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 από τον χρήστη και πως τα εκτυπώνουµε.

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

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»

Κοινό Λάθος (Ανάθεση σε 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 };

3) Συχνές λειτουργίες µε string Υπάρχουν κάποιες λειτουργίες που είναι πολύ συχνές πάνω σε Strings. Παραδείγµατα Compare: Σύγκριση δυο strings Copy: Αντιγραφή από ένα string σε άλλο ολόκληρο ή µέρος του. Concat: συνέδεσε δυο strings µαζί Substring: πόσες γραµµές περιέχουν το abc Η Βιβλιοθήκη <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)

3) Η συνάρτηση strlen() H συνάρτηση strlen µετρά το µέγεθος ενός String. π.χ. char msg[10]= HELLO printf( %d, strlen(msg)); Εκτυπώνει: 5. ηλαδή τον αριθµό των χαρακτήρων έως το \0 Προσοχή!!! Tο strlen δεν µας λέει το Μέγιστο Μέγεθος του String. Αυτό είναι 10 χαρακτήρες και το ξέρουµε πριν το compile

3) Η συνάρτηση strlen() #include <stdio.h> #include <string.h> int main() { char x[10] = "123456" ; printf("%d", strlen(x)); } Τυπώνει 6

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 (για να βρούµε κατευθείαν το µέγεθος)?

#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()