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

Σχετικά έγγραφα
Προγραμματισμός Ι (ΗΥ120)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 11η: Δείκτες, μέρος 1

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

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

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

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

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

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

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

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

Διάλεξη 9η: Πίνακες (arrays)

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

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

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

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

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

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

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

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

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

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

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

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

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

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

Διάλεξη 5η: Εντολές Επανάληψης

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

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

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

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

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

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

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

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

Διάλεξη 10η: Πολυδιάστατοι Πίνακες

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

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

Προγραμματισμός II. Δυναμική διαχείριση μνήμης

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

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

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

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

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

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

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

2 η Διάλεξη 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

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

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

12. Συναρτήσεις (Μέρος ΙI)

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

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

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

ΗΥ-150. Προγραµµατισµός. Αλφαριθµητικά (Strings)

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

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

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

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

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

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

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

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

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

ΣΥΝΟΠΤΙΚΟΣ ΟΔΗΓΟΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

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

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

Transcript:

Διάλεξη 8η: Αλφαριθμητικά (strings) Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) strings CS100, 2016-2017 1 / 12

Χαρακτήρες Αναπαριστώνται από έναν δυαδικό αριθμό 8 δυαδικών ψηφίων (8 bits) (256 διαφορετικές τιμές) Η κωδικοποίησή τους έχει τυποποιηθεί με τον κώδικα ASCII Εκτός από γράμματα και ψηφία υπάρχουν και πολλοί ειδικοί χαρακτήρες Σταθερές χαρακτήρων Η έκφραση z είναι μια σταθερά και αντιστοιχεί σε έναν int με τα 8 τελευταία του bits ίσα με τον ASCII κωδικό του χαρακτήρα z, \t, \n, κτλ Πρατικάκης (CSD) strings CS100, 2016-2017 2 / 12

Αλφαριθμητικά Μια σειρά από χαρακτήρες που αντιμετωπίζονται σαν ένα αντικείμενο Γράμματα, αριθμοί, ειδικοί χαρακτήρες (*, /, $) και όλοι οι εκτυπώσιμοι χαρακτήρες Τιμές εισάγονται μέσα σε διπλά εισαγωγικά: Hello Τα Strings είναι πάντα πίνακες από χαρακτήρες Ένα String είναι δείκτης στον 1ο χαρακτήρα του πίνακα Τιμή του string είναι η διεύθυνση του 1ου χαρακτήρα του πίνακα Πρατικάκης (CSD) strings CS100, 2016-2017 3 / 12

Δηλώσεις αλφαριθμητικών Δηλώσεις αλφαριθμητικών Σαν πίνακας από χαρακτήρες ή σαν δείκτης σε χαρακτήρα * color[] = blue ; *colorptr = blue ; Κάθε string τελειώνει με \0 και πρέπει να το λαμβάνουμε υπόψη στη δήλωση του πίνακα Ο πίνακας color έχει 5 στοιχεία Πρατικάκης (CSD) strings CS100, 2016-2017 4 / 12

Ανάγνωση Διάβασμα strings Χρήση scanf scanf( %s, word); scanf( %s, &(word[0])); Αντιγράφει στο word[] Δεν χρειάζεται & (επειδή είναι και δείκτης) Αφήνουμε χώρο στον πίνακα και για το \0 Πρατικάκης (CSD) strings CS100, 2016-2017 5 / 12

Παράδειγμα 1 stringsc #include <stdioh> int main(void) { string1[20], string2[] = string literal ; int i; printf( Please enter a string: ); scanf( %s, string1); printf( string1 is: %s\n, string1); printf( string2 is: %s\n, string2); printf( string1 with spaces between every acter is:\n ); for(i = 0; string1[i]!= \0 ; i++) { printf( %c, string1[i]); printf( \n ); return 0; Πρατικάκης (CSD) strings CS100, 2016-2017 6 / 12

Παράδειγμα 2 reversec #include <stdioh> #include <stringh> #define N 100 void inversion( *s) { int i; for(i = strlen(s) - 1; i >= 0; --i) { printf( %c, s[i]); printf( \n ); int main(void) { s[n]; printf( Please enter a word up to %d acters long:, N); scanf( %s, s); inversion(s); return 0; Πρατικάκης (CSD) strings CS100, 2016-2017 7 / 12

Μετατροπές αλφαριθμητικών Συναρτήσεις βιβλιοθήκης για μετατροπή από αλφαριθμητικά #include <stdlibh> int atoi(const *nptr); long atol(const *nptr); long long atoll(const *nptr); Βρίσκονται στο <stdlibh> Μετατρέπουν αλφαριθμητικά (αν είναι κατάλληλα) σε αριθμητικές τιμές Πρατικάκης (CSD) strings CS100, 2016-2017 8 / 12

String formatting Συναρτήσεις βιβλιοθήκης που μορφοποιούν ή διαβάζουν strings #include <stdioh> int sscanf(const *str, const *format, ); int sprintf( *str, const *format, ); int snprintf( *str, size_t size, const *format, ); Χρήση: string_ioc int main(void) { s[100], f[] = 145 22 012 ; float t1, t2, t3; sprintf(s, %s, f); sscanf(s, %f %f %f, &t1, &t2, &t3); printf( s = %s\nt1 = %f t2 = %f t3 = %f\n, s, t1, t2, t3); Πρατικάκης (CSD) strings CS100, 2016-2017 9 / 12

String formatting Συναρτήσεις βιβλιοθήκης που μορφοποιούν ή διαβάζουν strings Ισοδύναμη με την scanf μόνο που η είσοδος είναι από το #include <stdioh> string s και όχι από το πληκτρολόγιο int sscanf(const *str, const *format, ); int sprintf( *str, const *format, ); int snprintf( *str, size_t size, const *format, ); Χρήση: string_ioc int main(void) { s[100], f[] = 145 22 012 ; float t1, t2, t3; sprintf(s, %s, f); sscanf(s, %f %f %f, &t1, &t2, &t3); printf( s = %s\nt1 = %f t2 = %f t3 = %f\n, s, t1, t2, t3); Πρατικάκης (CSD) strings CS100, 2016-2017 9 / 12

String formatting Συναρτήσεις βιβλιοθήκης που μορφοποιούν ή διαβάζουν strings Ισοδύναμη με την printf μόνο #include <stdioh> που η έξοδος είναι στο string int sscanf(const *str, sconst και όχι στην *format, οθόνη ); int sprintf( *str, const *format, ); int snprintf( *str, size_t size, const *format, ); Χρήση: string_ioc int main(void) { s[100], f[] = 145 22 012 ; float t1, t2, t3; sprintf(s, %s, f); sscanf(s, %f %f %f, &t1, &t2, &t3); printf( s = %s\nt1 = %f t2 = %f t3 = %f\n, s, t1, t2, t3); Πρατικάκης (CSD) strings CS100, 2016-2017 9 / 12

String formatting Συναρτήσεις βιβλιοθήκης που μορφοποιούν ή διαβάζουν strings #include <stdioh> Ισοδύναμη με την sprintf μόνο που γράφει το πολύ size int sscanf(const *str, const *format, ); int sprintf( *str, const *format, bytes ); int snprintf( *str, size_t size, const *format, ); Χρήση: string_ioc int main(void) { s[100], f[] = 145 22 012 ; float t1, t2, t3; sprintf(s, %s, f); sscanf(s, %f %f %f, &t1, &t2, &t3); printf( s = %s\nt1 = %f t2 = %f t3 = %f\n, s, t1, t2, t3); Πρατικάκης (CSD) strings CS100, 2016-2017 9 / 12

Παράδειγμα Πρόβλημα: Η γραμματεία αποθηκεύει τη βαθμολογία του κάθε φοιτητή σε ένα αρχείο, χρησιμοποιώντας το login του φοιτητή και τη χρονιά εγγραφής ως όνομα αρχείου, πχ mpap_2008txt Να γράψετε πρόγραμμα που θα διαβάζει το login και τη χρονιά εγγραφής, και θα υπολογίζει το όνομα του αρχείου #include <stdioh> #define N 100 int main(void) { name[n], file_name[n]; int year; scanf( %s %d, name, &year); sprintf(file_name, %s_%dtxt, name, year); printf( %s\n, file_name); return 0; Πρατικάκης (CSD) strings CS100, 2016-2017 10 / 12

Συναρτήσεις βιβλιοθήκης χειρισμού strings Η βιβλιοθήκη stringh περιέχει διάφορες βοηθητικές συναρτήσεις #include <stringh> size_t strlen(const *); *strdup(const *); *strcat( *restrict, const *restrict); *strncat( *restrict, const *restrict, size_t); int strcmp(const *, const *); int strncmp(const *, const *, size_t); *strcpy( *restrict, const *restrict); *strncpy( *restrict, const *restrict, size_t); Προτιμάτε τις strncat, strncmp, strncpy Συχνά λάθη: όχι αρκετός χώρος για το string, λείπει το \0 στο τέλος, κλπ Πρατικάκης (CSD) strings CS100, 2016-2017 11 / 12

Συναρτήσεις βιβλιοθήκης χειρισμού strings Η βιβλιοθήκη stringh περιέχει διάφορες βοηθητικές συναρτήσεις Επιστρέφει το μήκος ενός #include <stringh> string, χωρίς το τελικό \0 size_t strlen(const *); *strdup(const *); *strcat( *restrict, const *restrict); *strncat( *restrict, const *restrict, size_t); int strcmp(const *, const *); int strncmp(const *, const *, size_t); *strcpy( *restrict, const *restrict); *strncpy( *restrict, const *restrict, size_t); Προτιμάτε τις strncat, strncmp, strncpy Συχνά λάθη: όχι αρκετός χώρος για το string, λείπει το \0 στο τέλος, κλπ Πρατικάκης (CSD) strings CS100, 2016-2017 11 / 12

Συναρτήσεις βιβλιοθήκης χειρισμού strings Η βιβλιοθήκη stringh περιέχει διάφορες βοηθητικές συναρτήσεις Δεσμεύει όση μνήμη χρειάζεται και αντιγράφει ένα #include <stringh> string Η μνήμη πρέπει να size_t strlen(const απελευθερωθεί *); στο τέλος με *strdup(const *); free *strcat( *restrict, const *restrict); *strncat( *restrict, const *restrict, size_t); int strcmp(const *, const *); int strncmp(const *, const *, size_t); *strcpy( *restrict, const *restrict); *strncpy( *restrict, const *restrict, size_t); Προτιμάτε τις strncat, strncmp, strncpy Συχνά λάθη: όχι αρκετός χώρος για το string, λείπει το \0 στο τέλος, κλπ Πρατικάκης (CSD) strings CS100, 2016-2017 11 / 12

Συναρτήσεις βιβλιοθήκης χειρισμού strings Η βιβλιοθήκη stringh περιέχει διάφορες βοηθητικές συναρτήσεις Ενώνει δύο strings Σβήνει το #include <stringh> byte \0 από το τέλος του size_t strlen(const πρώτου *); και αντιγράφει εκεί *strdup(const *); το δεύτερο Πρέπει να *strcat( *restrict, υπάρχει αρκετή *restrict); μνήμη για να *strncat( *restrict, constτο χωρέσει *restrict, size_t); int strcmp(const *, const *); int strncmp(const *, const *, size_t); *strcpy( *restrict, const *restrict); *strncpy( *restrict, const *restrict, size_t); Προτιμάτε τις strncat, strncmp, strncpy Συχνά λάθη: όχι αρκετός χώρος για το string, λείπει το \0 στο τέλος, κλπ Πρατικάκης (CSD) strings CS100, 2016-2017 11 / 12

Συναρτήσεις βιβλιοθήκης χειρισμού strings Η βιβλιοθήκη stringh περιέχει διάφορες βοηθητικές συναρτήσεις #include <stringh> size_t strlen(const *); *strdup(const *); Όπως και η strcat, αλλά θα αντιγράψει το πολύ N bytes από το δεύτερο string *strcat( *restrict, const *restrict); *strncat( *restrict, const *restrict, size_t); int strcmp(const *, const *); int strncmp(const *, const *, size_t); *strcpy( *restrict, const *restrict); *strncpy( *restrict, const *restrict, size_t); Προτιμάτε τις strncat, strncmp, strncpy Συχνά λάθη: όχι αρκετός χώρος για το string, λείπει το \0 στο τέλος, κλπ Πρατικάκης (CSD) strings CS100, 2016-2017 11 / 12

Συναρτήσεις βιβλιοθήκης χειρισμού strings Η βιβλιοθήκη stringh περιέχει διάφορες βοηθητικές συναρτήσεις #include <stringh> size_t strlen(const *); *strdup(const *); Συγκρίνει δύο strings και επιστρέφει αρνητικό, μηδέν ή θετικό αποτέλεσμα αν το πρώτο string είναι μικρότερο, ίσο ή μεγαλύτερο από το δεύτερο, αντίστοιχα *strcat( *restrict, const *restrict); *strncat( *restrict, const *restrict, size_t); int strcmp(const *, const *); int strncmp(const *, const *, size_t); *strcpy( *restrict, const *restrict); *strncpy( *restrict, const *restrict, size_t); Προτιμάτε τις strncat, strncmp, strncpy Συχνά λάθη: όχι αρκετός χώρος για το string, λείπει το \0 στο τέλος, κλπ Πρατικάκης (CSD) strings CS100, 2016-2017 11 / 12

Συναρτήσεις βιβλιοθήκης χειρισμού strings Η βιβλιοθήκη stringh περιέχει διάφορες βοηθητικές συναρτήσεις #include <stringh> size_t strlen(const *); *strdup(const *); *strcat( *restrict, const *restrict); *strncat( *restrict, const *restrict, size_t); Όπως και η strcmp, αλλά συγκρίνει το πολύ N bytes int strcmp(const *, const *); int strncmp(const *, const *, size_t); *strcpy( *restrict, const *restrict); *strncpy( *restrict, const *restrict, size_t); Προτιμάτε τις strncat, strncmp, strncpy Συχνά λάθη: όχι αρκετός χώρος για το string, λείπει το \0 στο τέλος, κλπ Πρατικάκης (CSD) strings CS100, 2016-2017 11 / 12

Συναρτήσεις βιβλιοθήκης χειρισμού strings Η βιβλιοθήκη stringh περιέχει διάφορες βοηθητικές συναρτήσεις #include <stringh> size_t strlen(const *); *strdup(const *); *strcat( *restrict, const *restrict); *strncat( *restrict, const *restrict, size_t); Αντιγράφει το δεύτερο string στο πρώτο, μαζί με το \0 int strcmp(const *, const *); int strncmp(const *, const *, size_t); *strcpy( *restrict, const *restrict); *strncpy( *restrict, const *restrict, size_t); Προτιμάτε τις strncat, strncmp, strncpy Συχνά λάθη: όχι αρκετός χώρος για το string, λείπει το \0 στο τέλος, κλπ Πρατικάκης (CSD) strings CS100, 2016-2017 11 / 12

Συναρτήσεις βιβλιοθήκης χειρισμού strings Η βιβλιοθήκη stringh περιέχει διάφορες βοηθητικές συναρτήσεις #include <stringh> size_t strlen(const *); *strdup(const *); *strcat( *restrict, const *restrict); *strncat( *restrict, const *restrict, size_t); int strcmp(const *, const *); int strncmp(const *, const *, size_t); Όπως και η strcpy, αλλά αντιγράφει το πολύ N bytes *strcpy( *restrict, const *restrict); *strncpy( *restrict, const *restrict, size_t); Προτιμάτε τις strncat, strncmp, strncpy Συχνά λάθη: όχι αρκετός χώρος για το string, λείπει το \0 στο τέλος, κλπ Πρατικάκης (CSD) strings CS100, 2016-2017 11 / 12

Παράδειγμα freqc #include <stringh> #include <stdioh> /* Συνάρτηση get_max * Δέχεται ένα πίνακα με ακέραιους * και το μήκος N του πίνακα * Επιστρέφει τη θέση του πίνακα με * τη μεγαλύτερη τιμή */ int get_max(int h[], int N) { int i, max_position = 0; for(i = 1; i < N; i++) { if(h[i] > h[max_position]) { max_position = i; return max_position; /* Συνάρτηση _freq * Δέχεται ένα string * Επιστρέφει τον πιο συχνό χαρακτήρα */ _freq(const *str) { int i, w = 0; int histogram[256]; result; for(i = 0; i < 256; i++) { histogram[i] = 0; for(i = 0; i < strlen(str); i++) { histogram[str[i]]++; result = () get_max(histogram, 256); return result; Πρατικάκης (CSD) strings CS100, 2016-2017 12 / 12