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

Σχετικά έγγραφα
Προχωρημένες έννοιες προγραμματισμού σε C

Προέλευση της Pazcal ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ. Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

Εισαγωγή σε βασικές έννοιες του Internet

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

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

Λειτουργικό σύστημα Unix

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

ιαφάνειες παρουσίασης #8

Αποτελέσματα προόδου

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

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

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

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

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

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

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

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

Ηλεκτρονικοί Υπολογιστές

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

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

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

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

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

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

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

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

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

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

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

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

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

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

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

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Αλγόριθμοι Αναζήτησης

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

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό. Ενότητα 8: Συναρτήσεις. Κ.

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

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

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

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

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

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

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

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

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

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

ιαφάνειες παρουσίασης #8

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

1 η ΑΣΚΗΣΗ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ. Ακ. έτος , 5ο Εξάμηνο, Σχολή ΗΜ&ΜΥ

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

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

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

ΣΤΑΤΙΣΤΙΚΗ ΑΝΑΛΥΣΗ ΜΕ ΧΡΗΣΗ Η/Υ

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

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

Εισαγωγή στον επιστημονικό προγραμματισμό 2 o Μάθημα

Θεωρία Πιθανοτήτων & Στατιστική

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

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

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Λεξικό, Union Find. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Εισαγωγή στον Προγραμματισμό

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

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

Προγραμματισμός Ι (HY120)

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Υλοποίηση ΛΑ με το flex

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

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

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

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

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

ΜΑΘΗΜΑΤΙΚΑ ΓΙΑ ΟΙΚΟΝΟΜΟΛΟΓΟΥΣ

Υπολογισμός - Εντολές Ελέγχου

Συντομότερα Μονοπάτια για Όλα τα Ζεύγη Κορυφών

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

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

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

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

Transcript:

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) Δημήτρης Φωτάκης fotakis@cs.ntua.gr) Επεξεργασία κειμένου και συμβολοσειρών σε C

Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς.

(i) Διάβασμα και επεξεργασία όλων των χαρακτήρων της εισόδου, π.χ. μέτρημα int n = 0; while (getchar()!= EOF) n++; printf("%d characters were read.\n", n); ΗτιμήEOF σημαίνει το τέλος της εισόδου (Ctrl-D ή Ctrl-Z απότοπληκτρολόγιο) 3 234

(ii) Π.χ. αντιγραφή της εισόδου στην έξοδο while (true) { int c = getchar(); if (c == EOF) break; putchar(c); ΗτιμήEOF πρέπει να ανατεθεί σε μεταβλητή int, όχι char! Ισοδύναμα: int c; while ((c = getchar())!= EOF) putchar(c); 4 235

(iii) Διάβασμα και επεξεργασία όλων των ακεραίων της εισόδου, π.χ. άθροιση int i, sum = 0; while (true) { if (scanf("%d", &i)!= 1) break; sum += i; Η scanf επιστρέφει το πλήθος των στοιχείων που διαβάστηκαν. Ισοδύναμα: int i, sum = 0; while (scanf("%d", &i) == 1) sum += i; 5 236

(iv) Παράδειγμα 1: πρόγραμμα που διαβάζει ένα κείμενο από την είσοδο μετράει τον αριθμό των χαρακτήρων και τον αριθμό των γραμμών υπολογίζει το μέσο όρο μήκους γραμμής Μετράμε τα '\n' και τους υπόλοιπους χαρακτήρες Ελέγχουμε για τέλος εισόδου (EOF) Για το μέσο όρο, κάνουμε διαίρεση! 6 237

(v) Παράδειγμα 1 int lines = 0, chars = 0; while (true) { int c = getchar(); if (c == EOF) break; if (c == '\n') lines++; else chars++; printf("%d lines were read\n", lines); if (lines > 0) printf("%0.3lf characters per line\n", 1.0 * chars / lines); Καλύτερα: (double) chars μετατροπή τύπου (type cast) 7 238

(vi) Παράδειγμα 2: πρόγραμμα που διαβάζει ένα κείμενο από την είσοδο μετράει τον αριθμό των χαρακτήρων, των λέξεων και των γραμμών Τι σημαίνει «λέξη»; Διαδοχικά γράμματα! Συνάρτηση για τον εντοπισμό γραμμάτων FUNC bool isletter (char c) { return c >= 'a' AND c <= 'z' OR c >= 'A' AND c <= 'Z'; 8 239

(vii) Παράδειγμα 2 int c, lines = 0, chars = 0, words = 0; c = getchar(); while (c!= EOF) if (isletter(c)) { words++; do { chars++; c = getchar(); while (isletter(c)); else { chars++; if (c == '\n') lines++; c = getchar(); Έχουμε διαβάσει ένα χαρακτήρα «μπροστά»! 9 240

(viii) Παράδειγμα 3: πρόγραμμα που διαβάζει ένα κείμενο από την είσοδο μετράει τις συχνότητες εμφάνισης λέξεων με μήκος από 1 μέχρι 20 γράμματα Μέτρηση μήκους λέξης Μετρητές λέξεων ανά μήκος: πίνακας! Εδώ δε χρειάζεται να ασχοληθούμε με τις αλλαγές γραμμών! 10 241

(ix) Παράδειγμα 3 int i, c, freq[21]; FOR (i, 1 TO 20) freq[i] = 0; c = getchar(); while (c!= EOF) if (isletter(c)) { int n = 0; do { n++; c = getchar(); while (isletter(c)); if (n <= 20) freq[n]++; else c = getchar(); 11 242

(x) Παράδειγμα 3 (συνέχεια) FOR (i, 1 TO 20) printf("%4d words of length %2d\n", freq[i], i); Μετατροπή κεφαλαίων γραμμάτων σε πεζά FUNC char tolower (char ch) { if (ch >= 'A' AND ch <= 'Z') return ch - 'A' + 'a'; else return ch; 12 243

(xi) Παράδειγμα 4: πρόγραμμα που διαβάζει ένα κείμενο από την είσοδο γράφει τους χαρακτήρες κάθε γραμμής αντίστροφα Αποθήκευση των χαρακτήρων κάθε γραμμής: πίνακας! Πρέπει να υποθέσουμε ένα μέγιστο μήκος γραμμής θα έπρεπε να κάνουμε έλεγχο υπέρβασής του! 13 244

(xii) Παράδειγμα 4 const int MAX = 80; int i, c, line[max]; while ((c = getchar())!= EOF) { int n = 0; while (c!= '\n') { line[n++] = c; c = getchar(); FOR (i, n-1 DOWNTO 0) putchar(line[i]); putchar('\n'); 14 245

(xiii) Εύρεση εμφάνισης λέξης-κλειδιού... // ηλέξη-κλειδί έχει 3 χαρακτήρες FOR (j, 0 TO 2) key[j] = getchar();... // έστω i το μήκος της γραμμής FOR (k, 0 TO i-3) if (line[k] == key[0] AND line[k+1] == key[1] AND line[k+2] == key[2]) WRITELN("keyword found!"); 15 246

Συμβολοσειρές (i) Πίνακες χαρακτήρων char [] Δείκτες σε χαρακτήρα char * Τελειώνουν με το χαρακτήρα '\0' Παράδειγμα char name[30]; printf("what s your name?\n"); scanf("%s", name); printf("hi %s, how are you?\n", name); 16 247

Συμβολοσειρές (ii) Χρήσιμες συναρτήσεις βιβλιοθήκης #include <string.h> Μέτρηση μήκους: strlen printf("your name has %d letters.\n", strlen(name)); Λεξικογραφική σύγκριση: if (strcmp(name, "John") == 0) strcmp printf("i knew you were John!\n"); Quiz: strcmp("ding", "dong") ==? 17 248

Συμβολοσειρές (iii) Αντιγραφή: char a[10]; strcpy(a, "ding"); a[1] = 'o'; printf("%s\n", a); Συνένωση: char a[10] = "abc"; strcat(a, "def"); printf("%s\n", a); strcpy // dong strcat // abcdef 18 249

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα» του ΕΜΠ έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.