Η γλώσσα C. Διαχείριςη Συμβολοςειρών

Σχετικά έγγραφα
Η γλώσσα C. Διαχείριση Συμβολοσειρών

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

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

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

Βαγγζλθσ Οικονόμου Διάλεξθ 7. Συναρτιςεισ Μζροσ 2ο

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

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

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

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

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

4-23: Προγραμματισμός σε C. Εισαγωγή. Εισαγωγικά. Εισαγωγικά

17. Πολυδιάςτατοι πίνακεσ

ιαφάνειες παρουσίασης #6 (β)

Συναρτήσεις πρότυπης βιβλιοθήκης 1. Μερικές συνήθεις συναρτήσεις βιβλιοθήκης int atoi(const char *p) int fclose(file *fp)

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

Συναρτήσεις διαχείρισης αλφαριθμητικών

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

16. Πίνακεσ και Συναρτήςεισ

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

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

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

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

Δομθμζνοσ Προγραμματιςμόσ. Βαγγζλθσ Οικονόμου Εργαςτιριο 9

Διάλεξη 18η: Διαχείρηση Αρχείων

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

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

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

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

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

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

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1

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

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

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

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

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

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

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

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

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

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

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

ΠΡΟΓΡΑΜΜΑΣΙΜΌ ΤΠΟΛΟΓΙΣΏΝ. Κεφάλαιο 8 Η γλϊςςα Pascal

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

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

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

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

ΘΥ101: Ειςαγωγι ςτθν Πλθροφορικι

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

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

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

5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ

343 Ειςαγωγι ςτον Προγραμματιςμό

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

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

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

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

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

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

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

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

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

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

Συμβολοσειρές Ορίσματα στη main()

Περιεχόµενα. Πρόλογος... 15

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2

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

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

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

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

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

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

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

Ενότητα 5: «Εισαγωγή στον Προγραμματισμό. Απλές ασκήσεις με γλώσσα C»

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

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

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

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

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

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

C: Από τη Θεωρία στην Εφαρμογή

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

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

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

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα

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

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

Εργαςτιριο Πικανοτιτων Σθμειϊςεισ προγραμματιςμοφ: βαςικζσ γνϊςεισ ανάπτυξθσ εφαρμογϊν. Κϊςτασ Αρβανιτάκθσ

Θεςιακά ςυςτιματα αρίκμθςθσ

Οι συναρτήσεις στη γλώσσα C

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

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

Παράςταςη ςυμπλήρωμα ωσ προσ 1

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

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

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

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. Διαφάνειεσ: Βαςικζσ Αρχζσ Προγραμματιςμοφ Α.Π.Θ. Δθμιτρθσ Βράκασ

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

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

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

Transcript:

Η γλώσσα C Διαχείριςη Συμβολοςειρών

υμβολοςειρζσ (strings) Σι είναι; Πίνακασ χαρακτιρων (με τη ςφμβαςη ότι ςτο τζλοσ ζχει \0 ). char str[10]; /* Άρα 9 χαρακτιρεσ + το \0 */ Με εφκολθ αρχικοποίθςθ: char str*10+ = This is ; Και με διαχείριςθ που είναι πιο εφκολθ από τθ διαχείριςθ πινάκων, όπωσ κα δοφμε. Όμωσ μθν ξεχνάμε ότι είναι πίνακεσ (άρα ιςχφουν ότι και για αυτοφσ). Σι είναι τα παρακάτω: char b[10] = this ; Σο b και το this είναι strings. char *c; char *d = that ; Δεν είναι string! Είναι ζνασ ptr ςε χαρακτιρα. Σο that είναι string (αποκθκευμζνο κάπου ςτθ μνιμθ) και ο d είναι pointer ςτον πρϊτο χαρακτιρα του d. Λζμε καταχρθςτικά ότι και το d είναι string. 2

Αρχικοποίθςθ int main() { char q*+ = First ; char r*16+ =, S, e, c, o, n, d, \0 -; char s[16] = Third ; char t[16]; char *u = Fifth ; char *w; t = Fourth ; /* Δεν επιτρζπεται! Πρζπει t*0+ = F, t*1+ = o... */ w = Sixth ; /* Επιτρζπεται, μιασ και είναι pointer */ 3

puts/fputs int puts(const char *s); Η puts τυπϊνει το string s και ζνα χαρακτήρα νζασ γραμμήσ ( \n ) ςτθν οκόνθ. Επιςτρζφει EOF αν ςυμβεί κάποιο λάκοσ, διαφορετικά επιςτρζφει μθ αρνθτικι τιμι. int fputs(const char *s, FILE *fp); Η fputs τυπϊνει το string s ςτο αρχείο fp (χωρίσ επιπλζον \n). Για τφπωμα ςτθν οκόνθ, περάςτε ωσ αρχείο το stdout. Επιςτρζφει EOF αν ςυμβεί κάποιο λάκοσ, διαφορετικά επιςτρζφει μθ αρνθτικι τιμι. Π.χ. fputs( hi, stdout); 4

gets/fgets char *gets(char *s); Η gets διαβάηει τθν επόμενθ γραμμι ειςόδου και τθν αποκθκεφει ςτο string s. Αντικαθιςτά τον τερματικό χαρακτήρα νζασ γραμμήσ με \0. Επιςτρζφει s, ι NULL αν ςυναντθκεί το τζλοσ του αρχείου (EOF) ι αν ςυμβεί κάποιο λάκοσ. Δεν είναι αςφαλήσ ςυνάρτηςη (τι γίνεται αν το s[] δεν φτάνει?). char *fgets(char *s, int num, FILE *fp); Η gets διαβάηει μζχρι num-1 χαρακτήρεσ από το αρχείο fp (το πλθκτρολόγιο είναι το stdin) και τθν αποκθκεφει ςτο string s. Αν πληκτρολογήθηκε το newline, τότε γράφεται ΚΑΙ ο χαρακτήρασ \n μζςα ςτο s και αμζςωσ μετά γράφεται και το \0. Επιςτρζφει s, ι NULL αν ςυναντθκεί το τζλοσ του αρχείου (EOF) ι αν ςυμβεί κάποιο λάκοσ. Να την προτιμάται ζναντι τησ gets(). Π.χ. fgets(str, 9, stdin); /* Διαβάηει ζωσ 8 χαρακτιρεσ από πλθκτρολόγιο */ 5

printf / scanf Εκτφπωςθ ι διάβαςμα με το %s ςτο format printf: %s : τυπϊνει όλο το string %Ns τυπϊνει τουλάχιςτον Ν χαρακτιρεσ (με κενά αν χρειαςτεί) %.Ms τυπϊνει το πολφ Μ χαρακτιρεσ %N.Ms τυπϊνει τουλάχιςτον Μ και το πολφ Μ χαρακτιρεσ %-Ns τυπϊνει τουλάχιςτον Ν χαρακτιρεσ, με αριςτερι ςτοίχιςθ Π.χ. printf( %-3.5s, str); scanf: %s : διαβάηει μία ςυμβολοςειρά ΠΡΟΟΧΗ: θ ςυμβολοςειρά τελειϊνει όταν ςυναντθκεί χαρακτιρασ κενοφ (space, tab, newline) 6

Παραδείγματα /* gets example */ #include <stdio.h> int main() { char string [256]; printf ("Insert your full address: "); gets(string); printf ("Your address is: %s\n",string); return 0; /* gets example */ #include <stdio.h> int main () { char string [] = "Hello world!"; puts (string); 7

Παραδείγματα #include <stdio.h> main() { char test1[5], test2[5]; scanf("%s", test1); printf("test1=%s\n", test1); gets(test2); printf("test2=%s\n", test2); Εκτέλεση: $./aout 13131 test1=13131 test2= $... Σο test2 κα είναι ίςο με "end of line" από τθν προθγοφμενθ είςοδο! 8

Παραδείγματα #include <stdio.h> main() { char test1[5], test2[5]; scanf("%s", test1); printf("test1=%s\n", test1); scanf("%s", test2); printf("test2=%s\n", test2); Εκτέλεση: $./aout 1313 test1=1313 1233 test2=1233 $... Χρθςιμοποιείται θ scanf αντί για τθν gets. Η scanf αγνοεί τθν αλλαγι γραμμισ αφοφ παίρνει το πρϊτο μθ blank και ςταματά ςτο αμζςωσ επόμενο μθ blank 9

Παραδείγματα #include <stdio.h> main() { char lula[]="lula"; char *ptr = lula; puts(lula); puts(" > "); puts(ptr + 2); printf("%s > %s", lula, ptr+2); Εκτέλεση: $./aout lula > la lula > la $... H puts προςθζτει το \n 10

Παραδείγματα «Χειροποίθτεσ» puts που δεν εκτυπϊνουν το EOL. H putchar(ch) τυπϊνει ςτθν οκόνθ τον χαρακτιρα ch Είναι ιςοδφναμθ με το printf( %c, ch); void myputs(char *string) { int i = 0; while (string[i]!= '\0') putchar(string[i++]); void myputs(char *string) { while (*string!= '\0') { putchar(*string); string++; /* To \0 έχει ASCII κωδικό μηδέν (0)! */ void myputs(char *string) { while (*string) putchar(*(string++)); 11

sprintf / sscanf int sprintf(char *s, const char *format,...) Η ςυνάρτθςθ αυτι λειτουργεί ακριβϊσ όπωσ θ printf() με τθ διαφορά δεν τυπώνει ςτην οθόνη αλλά γράφει ςτο string s ςτο οποίο τοποθετείται επιπλζον και ο χαρακτήρασ '\0'. Επιςτρζφεται ο αρικμόσ των χαρακτιρων που γράφτθκαν ςτο s πλθν του χαρακτιρα '\0'. int sscanf(char *s, const char *format,...) Η ςυνάρτθςθ αυτι λειτουργεί ακριβϊσ όπωσ θ scanf() με τθ διαφορά ότι η είςοδοσ των δεδομζνων προζρχεται από το string s και όχι από το πληκτρολόγιο. Επιςτρζφει είτε τον αρικμό των αντικειμζνων που ενθμερϊκθκαν (αν όλα πάνε καλά), είτε EOF (ςε περίπτωςθ λάκουσ). 12

Παράδειγμα /* sprintf example */ #include <stdio.h> int main () { char buffer [50]; int n, a=5, b=3; n=sprintf (buffer, "%d plus %d is %d", a, b, a+b); printf ("[%s] is a %d char long string\n", buffer, n); return 0; $ a.out [5 plus 3 is 8] is a 13 char long string 13

Παράδειγμα $./a.out 2 #include <stdio.h> main() { int k, m; float f; char *x="2 minutes to 12.0"; char y[20], z[20], w[80]; minutes to 12.000000 New order: 2 to 12 minutes with 15 characters (including spaces) sscanf(x, "%d%s%s%f", &m, y, z, &f) ; printf("%d\n%s\n%s\n%f\n", m, y, z, f) ; k = sprintf(w, "%d %s %d %s ",m, z, (int) f, y) ; printf("\nnew order: %s\n", w); printf("with %d characters (including spaces)", k); 14

Επαναλθπτικι κλιςθ τθσ sscanf #include <stdio.h> main() { int k, m; float f; char x[30]="2 minutes to 12.0"; char *p = x; char y[30]; while ((k=sscanf(p, "%s", y)) > 0) { printf("%s\n", y); p = p + k + 1; 15

Επαναλθπτικι μζτρθςθ λζξεων #include <stdio.h> main() { int k, count; char x[30], y[30], *p; while (1) { count = 0; gets(x); if (strcmp(x, "EXIT")!= 0) { p = x; while ((k=sscanf(p, "%s", y) > 0) && ((p-x) < strlen(x))) { printf("%s\n", y); p = p + k + 1; count++; printf("total number of words: %d\n", count); else break; 16

Επαναλθπτικι μζτρθςθ λζξεων (2 θ ) #include <stdio.h> main() { int k, count; char x[30], y[30], *p; while (strcmp(gets(x), "EXIT")!= 0) { count = 0; p = x; while ((k=sscanf(p,"%s",y) > 0) && ((p-x) < strlen(x))) { printf("%s\n", y); p = p + k + 1; count++; printf("total number of words: %d\n", count); 17

Διαχείριςθ υμβολοςειρϊν μζςω string.h Μια ςυμβολοςειρά (string) είναι ζνασ πίνακασ χαρακτιρων ςτον οποίο τοποκετείται τελευταίοσ ο χαρακτιρασ '\0', ωσ ζνδειξθ του τζλουσ τθσ ςυμβολοςειράσ Μποροφμε να διαχειριςτοφμε ζνα string με δφο τρόπουσ Ωσ ζναν πίνακα, το οποίο ςυνεπάγεται ςχετικι δυςκολία char line[8]; line[0] = 'H'; line[1] = 'e'; line[2] = 'l'; line[3] = 'l'; line[4] = 'o'; line[5] = '\0'; Μζςω τθσ χριςθσ ειδικϊν ςυναρτιςεων που παρζχει θ C μζςω του αρχείου <string.h> strcpy(line, "Hello"); 18

υναρτιςεισ Διαχείριςθσ υμβολοςειρϊν char *strcpy(s, t); Αντιγράφει το string t ςτο s, μαηί με τον χαρακτιρα '\0' και επιςτρζφει το s Παράδειγμα char s[6]; strcpy(s, "hello"); Σι γίνεται αν ςτο s δεν χωράει το t; char *strncpy(s, t, n); Αντιγράφει το πολφ n χαρακτιρεσ από το t ςτο s, το t μπορεί να ζχει λιγότερουσ. Επιςτρζφει το s char *strcat(s, t); Προςκζτει ςτο τζλοσ του s το string t. Επιςτρζφει το s. char *strncat(s, t, n); Προςκζτει ςτο τζλοσ του s το πολφ n χαρακτιρεσ του t, και τοποκετεί επίςθσ και τον χαρακτιρα '\0'. Επιςτρζφει το s. 19

υναρτιςεισ Διαχείριςθσ υμβολοςειρϊν int strcmp(s, t); υγκρίνει λεξικογραφικά τα δφο strings. (βαςικό κριτιριο) περιεχόμενο (δευτερεφον κριτιριο) μικοσ Επιςτρζφει: Αν (s == t) 0 Αν (s > t) > 0 Αν (s < t) < 0 int strncmp(s, t, n); Όπωσ και παραπάνω αλλά ςυγκρίνει λεξικογραφικά το πολφ n χαρακτιρεσ char *strstr(s, t); Επιςτρζφει ζνα δείκτθ ςτθν πρϊτθ εμφάνιςθ ςτο s του t, (διαφορετικά) επιςτρζφει NULL αν το t δεν περιζχεται ςτο s. int strlen(s); Επιςτρζφει το μικοσ τθσ ςυμβολοςειράσ s (χωρίσ το \0). 20

Παραδείγματα Ζςτω: char a[30] = "Καλθμζρα, "; char b[20] = "Καλό μάκθμα!"; Σότε: strcpy(a,b) printf("%s", a); Καλό μάκθμα! strncpy(a,b,4) printf("%s", a); Καλόμζρα, strcat(a,b) printf("%s", a); Καλημέρα, Καλό μάθημα! 21

Παραδείγματα Ζςτω: int ret; char *p; char a[30] = "Καλημέρα, "; char b[20] = "Καλό μάθημα!"; Σότε: ret = strcmp(a,b); printf("%d", ret); κάποια αρνθτικι τιμι p = strstr(a,"θμ") printf("%s", p); θμζρα, printf("%d", strlen(a) ); 10 Σι κα τυπϊςει το: printf( %d, %d, sizeof(a), strlen(a)); 30, 10 22

υναρτιςεισ Διαχείριςθσ υμβολοςειρϊν char *strtok(char *s, char *t); Ψάχνει ςτο s για κομμάτια (tokens) που διαχωρίηονται με τουσ χαρακτιρεσ που περιγράφονται ςτο t. Κάκε διαφορετικι κλιςθ τθσ strtok επιςτρζφει και ζνα καινοφργιο token (κανονικό string με χαρακτιρα τερματιςμοφ). Χριςθ: 1 ο token: καλϊ tok = strtok(s, t); Επόμενα: καλϊ tok = strtok(null, t); Επιςτρζφει NULL αν δεν υπάρχουν άλλα tokens ςτο s. Προςοχι! Η ςυνάρτηςη τροποποιεί το πρώτο όριςμα τησ Δεν μπορεί να χρηςιμοποιηθεί ςε ςταθερά strings 23

Παράδειγμα strtok char email[] = "zas@cs.uoi.gr"; char token[] = "@"; char *s; s = strtok(email, token); while ((s = strtok(null, token))!= NULL)... 24

Παράδειγμα strtok (1/2) Να γράψετε πρόγραμμα το οποίο λαμβάνει διευκφνςεισ θλεκτρονικοφ ταχυδρομείου και επιςτρζφει τα πεδία από τα οποία αποτελοφνται χετικό παράδειγμα εκτζλεςθσ: $ myprog type email address: zas@cs.uoi.gr fields of email address: zas, cs, uoi, gr 25

Παράδειγμα strtok (2/2) #include <stdio.h> #include <string.h> int main(void) { char email[80]; char token[] = "@."; char *s; printf("type email address:"); scanf("%s", email); printf("fields of email address:"); s = strtok(email, token); if (s!= NULL) printf("%s", s); while ((s = strtok(null, token))!= NULL) { printf(", %s", s); return 0; 26

υναρτιςεισ Ελζγχου - Μετατροπισ #include <ctype.h> υναρτιςεισ ελζγχου int isalnum(int c);true για γράμμα ι ψθφίο int isalpha(int c); true για γράμμα int isdigit(int c); true για ψθφίο int isspace(int c); true για κενό, tab, \n,... int islower(int c); true για γράμμα μικρό int isupper(int c); true για γράμμα κεφαλαίο υναρτιςεισ μετατροπισ int tolower(int c); μετατροπι κεφαλαίου ςε μικρό int toupper(int c); μετατροπι μικροφ ςε κεφαλαίο 27

υναρτιςεισ Ελζγχου - Μετατροπισ #include <stdlib.h> int atoi(char *s); μετατροπι string ςε ακζραιο Σο string s πρζπει να ξεκινά με κενό ι κάποιον αρικμό Η ςυνάρτθςθ ςταματά να διαβάηει από το string μόλισ βρει κάποιον μθαρικμθτικό χαρακτιρα Αν θ μετατροπι δεν μπορεί να ςυμβεί, επιςτρζφει 0 long atol(char *s); μετατροπι string ςε long double atof(char *s); μετατροπι string ςε double Πϊσ μετατρζπω αρικμοφσ ςε strings; 28

Παραδείγματα int i; i = atoi( "512" ); i = atoi( "512.035" ); i = atoi( " 512.035" ); i = atoi( " 512+34" ); i = atoi( " 512 bottles of beer on the wall" ); int i = atoi( " does not work: 512" ); // i == 0 long l = atol( "1024.0001" ); double x = atof( "42.0is_the_answer" ); 29

φνοψθ Βαςικζσ ςυναρτιςεισ ειςόδου εξόδου int printf(const char *format,...); int scanf(const char *format,...) Ειδικοί χαρακτιρεσ ςτο format τουσ Ακζραιοι αρικμοί %d ςτο δεκαδικό ςφςτθμα %u χωρίσ πρόςθμο ςτο δεκαδικό ςφςτθμα %o χωρίσ πρόςθμο ςτο οκταδικό ςφςτθμα %x χωρίσ πρόςθμο ςτο δεκαεξαδικό ςφςτθμα Αρικμοί κινθτισ υποδιαςτολισ %f ςε μορφι: *-]ddd.dddddd %e ςε μορφι: *-]ddd.dddddd e[+/-]ddd %g ςε μορφι %f ι %e 30

φνοψθ Ειδικοί χαρακτιρεσ ςτο format τουσ Άλλοι τφποι %c χαρακτιρασ %s ςυμβολοςειρά (string) %p δείκτθσ Παραλλαγζσ ςτο format Μζγεκοσ αρικμϊν %h αρικμοί short, π.χ. %hd, %hx %l αρικμοί long ι double, π.χ. %ld, %lf %L αρικμοί long double, π.χ. %Lf 31

φνοψθ Παραλλαγζσ ςτο format Μικοσ αποτελζςματοσ %8d αρικμόσ ςε μικοσ 8 χαρακτιρων %20s ςυμβολοςειρά ςε μικοσ 20 χαρακτιρων %+8d αρικμόσ ςε μικοσ 8 χαρακτιρων, τφπωςε και πρόςθμο %08d αρικμόσ ςε μικοσ 8 χαρακτιρων, τα πρϊτα εξ' αυτϊν 0 %-8d όπωσ το %8d με ςτοίχιςθ αριςτερά 32

printf demo (1/2) #include <stdio.h> int main(void) { int i; // Number to print. double f; // Number to print. printf("enter an integer (use either + or -): "); scanf ("%d", &i); printf("this is the integer... %d \n", i); printf("this is the integer in octal... %o \n", i); printf("octal with leading zero... %#o \n", i); printf("this is the integer in hex... %x or %X \n", i, i); printf("hex with leading 0x... %#x or %#X \n", i, i); printf("forcing a plus or minus sign... %+d \n", i); printf("include space before + numbers... % d \n", i); printf("field width of 3... %3d \n", i); printf("field width of 5... %5d \n", i); printf("field width of 7... %7d \n", i); printf("same as above with left justification. %-7d \n", i); printf("field width of 7 with zero fill... %07d \n", i); printf("at least 3 digits... %.3d \n", i); printf("at least 5 digits... %.5d \n", i); printf("field width of 10, at least 7 digits.. %10.7d \n", i); 33

printf demo (2/2) printf("\nenter a floating point number: "); scanf ("%lf", &f); printf("this is the number... %f \n", f); printf("forcing a plus or minus sign... %+f \n", f); printf("field width of 20... %20f \n", f); printf("0 decimal places... %.0f \n", f); printf("0 decimal places forcing decimal... %#.0f \n", f); printf("3 decimal places... %.3f \n", f); printf("20 decimal places... %.20f \n", f); printf("field width of 20, 3 decimal places... %20.3f \n", f); printf("\nhere is the number in e format:\n"); printf("3 decimal places... %.3e \n", f); printf("5 decimal places & big 'e'... %.5E \n", f); printf("\nhere is the number in g format:\n"); printf("no special requests... %g \n", f); printf("maximum of 1 significant figure... %.1g \n", f); printf("maximum of 4 significant figures... %.4g \n", f); return 0; 34

φνοψθ Διαχείριςθ χαρακτιρων/ςυμβολοςειρϊν int putchar(int c); int getchar(); int puts (const char *s); char *gets (char *s); Διαχείριςθ ςυμβολοςειρϊν <string.h> size_t strlen(const char *s): Μζτρθςθ αρικμοφ χαρακτιρων τθσ ςυμβολοςειράσ s char *strcpy(char *s1, const char *s2): Αντιγραφι τθσ ςυμβολοςειράσ s2 ςτθν s1 char *strcat(char *s1, const char *s2): Προςκικθ τθσ ςυμβολοςειράσ s2 ςτο τζλοσ τθσ s int strcmp(const char *s1, const char *s2): φγκριςθ των ςυμβολοςειρϊν s1 και ς2 35

φνοψθ Μετατροπι ςυμβολοςειρϊν <stdlib.h> int atoi(const char *s): Μετατροπι τθσ ςυμβολοςειράσ s ςε int. long int atol(const char *s): Μετατροπι τθσ ςυμβολοςειράσ s ςε long int. double atof(const char *s): Μετατροπι τθσ ςυμβολοςειράσ s ςε double. 36

Προγραμματισμός σεc Περίπτωςη Διαχείριςησ Συμβολοςειρών: Ορίςματα ςτην main()

Ορίςματα ςτθν main() $ ls $ ls l; ls al; gcc myfile.c -lm Γενικά ςε ζνα πρόγραμμα μποροφμε να δϊςουμε ωσ είςοδο δεδομζνα/ορίςματα/επιλογζσ τθ ςτιγμι που ξεκινάει θ εκτζλεςθ του, από τθ γραμμι εντολϊν Πϊσ μποροφμε να γνωρίηουμε τα δεδομζνα/ορίςματα που δίνει o χριςτθσ; Απάντηςη: Παράμετροι ςτθν main()! (τθν οποία μζχρι τϊρα τθν ορίηαμε χωρίσ παραμζτρουσ) Σα δεδομζνα τα δζχεται θ main() ωσ strings 38

Ορίςματα ςτθν main() Μζχρι τϊρα: int main(void) { Γενικά όμωσ, ο προγραμματιςτισ μπορεί να γράψει: int main(int argc, char *argv[]) { ι ιςοδφναμα: int main(int argc, char **argv) { Σο argv είναι ζνασ πίνακασ δεικτϊν ςε ςυμβολοςειρζσ (strings) To argc είναι το πλικοσ των ςτοιχείων του πίνακα Πάντα το ςτοιχείο 0 είναι το όνομα του προγράμματοσ 39

Παράδειγμα οριςμάτων ςτθν main() $ a.out hi there argc = 3 argv[0]: όνομα προγράμματοσ, a.out" argv[1]: πρϊτο όριςμα προγράμματοσ hi argv[2]: δεφτερο όριςμα προγράμματοσ there" 40

Παράδειγμα (εκτφπωςθ οριςμάτων) $ a.out hello world argc = 3 Program name: a.out Arguments: hello, world #include <stdio.h> main(int argc, char *argv[]) { int i; printf( argc = %d\n, argc); printf( Program name: %s\n, argv[0]); printf( Arguments: ); for (i = 1; i < argc; i++) printf( %s,, argv[i]); printf("\n"); 41

Επιπλζον παράδειγμα (πρόςκεςθ οριςμάτων) $ myadd 5 10 15 Program name: myadd Result: 30 #include <stdio.h> main(int argc, char *argv[]) { int i, sum = 0; printf( Program name: %s\n, argv[0]); if (argc < 2) exit(1); /* Nothing to add */ for (i = 1; i < argc; i++) { sum = sum + atoi(argv[i]); printf( Result: %d\n, sum); 42