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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αλφαριθμητικά, πίνακες και δείκτες

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

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

Βιβλιοθήκη stdio. Προγραμματισμός II 1

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

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

HY150a Φροντιστήριο 3 24/11/2017

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

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

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

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

double sum(double a, double b) { return(a+b); } double my_avg(double a, double b) { return(sum(a, b)/2.0); }

Βιβλιοθήκη stdio. Προγραμματισμός II 1

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

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

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

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

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

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

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

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

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

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

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

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

lab10grades - Το αποτέλεσµα της τοµής θα έπρεπε να εµφανίζετε µέσα σε εισαγωγικά "Helo".

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

Χαρακτηριστικά ενοτήτων

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

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

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

Προγραµµατισµός Ι 1

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

Ενδεικτικές λύσεις και στατιστικά

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

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

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

Προγραμματισμός HY: Γλώσσα Προγραμματισμού C

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

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

Εισαγωγή στους Δείκτες (Pointers)

Transcript:

Προγραμματισμός Ι (ECE115) #12 συναρτήσεις strings 1 Χρήστος Αντωνόπουλος

Βασικές συναρτήσεις της βιβλιοθήκης string #include <string.h> size_t strlen(const char *s); char *strcpy(char *dest, const char *src); char *strcat(char *dest, const char *src); char *strchr(const char *str, int c); char *strrchr(const char *str, int c); char *strstr(const char *str, const char *find); char *strpbrk(const char *str, const char *any); int strcmp(const char *s1, const char *s2); 2 Χρήστος Αντωνόπουλος

strlen size_t strlen(const char *s); επιστρέφει τον αριθμό των χαρακτήρων μέχρι (αλλά χωρίς) το τερματικό στοιχείο (null byte) ο πίνακας που περνιέται σαν παράμετρος πρέπει να έχει τουλάχιστον ένα τερματικό στοιχείο 3 Χρήστος Αντωνόπουλος

Ενδεικτική υλοποίηση size_t strlen(const char *s) { size_t i; for (i=0; s[i]!= '\0'; i++); return (i); 4 Χρήστος Αντωνόπουλος

strcmp / strncmp int strcmp(const char *s1, const char *s2); συγκρίνει τα περιεχόμενα του s1 με τα περιεχόμενα του s2 αν το s1 είναι μικρότερο του s2, επιστρέφεται < 0 αν το s1 είναι μεγαλύτερο του s2, επιστρέφεται > 0 αν το s1 είναι ίδιο με το s2, επιστρέφεται 0 η σύγκριση γίνεται με βάση την κωδικοποίηση ASCII μέχρι να βρεθεί ένα τερματικό στοιχείο (null byte) int strncmp(const char *s1, const char *s2, size_t n); η σύγκριση τερματίζεται το αργότερο μετά από n χαρακτήρες εκτός και αν νωρίτερα βρεθεί ένα τερματικό στοιχείο 5 Χρήστος Αντωνόπουλος

Ενδεικτικές υλοποιήσεις int strcmp(const char *s1, const char *s2) { size_t i; for (i=0; (s1[i]==s2[i]) && (s1[i]!='\0'); i++); return (s1[i] - s2[i]); int strncmp(const char *s1, const char *s2, size_t n) { size_t i; for (i=0; (i<n) && (s1[i]==s2[i]) && (s1[i]!='\0'); i++); return (s1[i] - s2[i]); 6 Χρήστος Αντωνόπουλος

strcpy / strncpy char *strcpy(char *dest, const char *src); αντιγράφει τo src πάνω στο dest το src πρέπει να έχει τερματικό, που αντιγράφεται στο dest τα src και dest δεν πρέπει να έχουν επικαλυπτόμενη μνήμη char *strncpy(char *dest, const char *src, size_t n); αντιγράφει το πολύ n χαρακτήρες από τo src πάνω το dest αν το μήκος του src είναι μικρότερο από n τότε γράφονται επιπλέον null bytes έτσι ώστε να γραφτούν συνολικά n bytes αν δεν υπάρχει τερματικό null byte μέσα στους πρώτους n χαρακτήρες του src τότε δεν θα γραφτεί τερματικό στο dest τα src και dest δεν πρέπει να έχουν επικαλυπτόμενη μνήμη 7 Χρήστος Αντωνόπουλος

Ενδεικτικές υλοποιήσεις char *strcpy(char *dest, const char *src) { size_t i; for (i = 0; src[i]!= '\0'; i++) { dest[i] = src[i]; dest[i] = '\0'; return(dest); char *strncpy(char *dest, const char *src, size_t n) { size_t i; for (i = 0; (i < n) && (src[i]!= '\0'); i++) { dest[i] = src[i]; for ( ; i < n; i++) { dest[i] = '\0'; return(dest); 8 Χρήστος Αντωνόπουλος

strcat / strncat char *strcat(char *dest, const char *src); αντιγράφει τo src επιμηκύνοντας αντίστοιχα το dest το dest πρέπει να έχει τερματικό, που είναι και το σημείο πάνω στο οποίο αρχίσει η αντιγραφή των περιεχομένων του src το src πρέπει να έχει τερματικό, που αντιγράφεται στο dest τα src και dest δεν πρέπει να έχουν επικαλυπτόμενη μνήμη char *strncat(char *dest, const char *src, size_t n); αντιγράφει έως n χαρακτήρες από τo src επιμηκύνοντας αντίστοιχα το dest, προσθέτοντας και το τερματικό null byte αν το src έχει τουλάχιστον n χαρακτήρες τότε δεν χρειάζεται να έχει τερματικό null byte αν τα src και dest δεν πρέπει να έχουν επικαλυπτόμενη μνήμη 9 Χρήστος Αντωνόπουλος

Ενδεικτικές υλοποιήσεις char *strcat(char *dest, const char *src, size_t n) { size_t i, dest_len; dest_len = strlen(dest); for (i = 0; src[i]!= '\0'; i++) { dest[dest_len + i] = src[i]; dest[dest_len + i] = '\0'; return(dest); char *strncat(char *dest, const char *src, size_t n) { size_t i, dest_len; dest_len = strlen(dest); for (i = 0 ; (i < n) && (src[i]!= '\0'); i++) { dest[dest_len + i] = src[i]; dest[dest_len + i] = '\0'; return(dest); 10 Χρήστος Αντωνόπουλος

#include <stdio.h> #include <string.h> #define N 32 int main(int argc, char *argv[]) { char s1[n], s2[3*n]; int res; scanf("%31s %31s", s1, s2); printf("s1 is %s and s2 is %s\n", s1, s2); strcpy(s2, s1); printf("s1 is %s and s2 is %s\n", s1, s2); strcat(s2, s1); printf("s1 is %s and s2 is %s\n", s1, s2); strcat(s2, &s1[strlen(s1)/2]); printf("s1 is %s and s2 is %s\n", s1, s2); return(0); 11 Χρήστος Αντωνόπουλος

strchr / strrchr char *strchr(const char *str, int c); επιστρέφει δείκτη στην θέση του src όπου συναντάται για πρώτη φορά ο χαρακτήρας με τιμή c αν δεν βρεθεί χαρακτήρας με τιμή c, επιστρέφεται NULL char *strrchr(const char *str, int c); επιστρέφει δείκτη στην θέση του src όπου συναντάται για τελευταία φορά ο χαρακτήρας με τιμή c αν δεν βρεθεί χαρακτήρας με τιμή c, επιστρέφεται NULL 12 Χρήστος Αντωνόπουλος

Ενδεικτικές υλοποιήσεις char *strchr(const char *str, int c) { int i; for (i = 0; str[i]!= '\0'; i++) { if (str[i] == c) { return(&str[i]); return(null); char *strrchr(const char *str, int c) { int i, pos = 0; for (i = 0; str[i]!= '\0'; i++) { if (str[i] == c) { pos = i; if (str[pos] == c) { return(&str[pos]); else { return(null); 13 Χρήστος Αντωνόπουλος

#include <stdio.h> #include <string.h> #define N 64 int main(int argc, char *argv[]) { char str[n], c, *p; scanf("%63s %c", str, &c); p = strchr(str, c); if (p == NULL) { printf("%c not found\n", c); else { printf("%c first found at pos %ld\n", c, p - str); p = strrchr(str, c); if (p == NULL) { printf("%c not found\n", c); else { printf("%c last found at pos %ld\n", c, p - str); return(0); 14 Χρήστος Αντωνόπουλος

strstr / strpbrk char *strstr(const char *str, const char *find); επιστρέφει δείκτη στην θέση του src όπου συναντάται για (πρώτη φορά) ολόκληρη η συμβολοσειρά find αν δεν βρεθεί η συμβολοσειρά find, επιστρέφεται NULL char *strpbrk(const char *str, const char *any); επιστρέφει δείκτη στην θέση του src όπου συναντάται για (πρώτη φορά) κάποιος από τους χαρακτήρες που βρίσκονται στην συμβολοσειρά any αν δεν βρεθεί κανένας χαρακτήρας της any, επιστρέφεται NULL 15 Χρήστος Αντωνόπουλος

Ενδεικτικές υλοποιήσεις char *strstr(const char *str, const char *find) { int i, n = strlen(find); for (i = 0; str[i]!= '\0'; i++) { if (!strncmp(&str[i], find, n)) { return(&str[i]); return(null); char *strpbrk(const char *str, const char *any) { int i; for (i = 0; str[i]!= '\0'; i++) { if (strchr(any, str[i])!= NULL) { return(&str[i]); return(null); 16 Χρήστος Αντωνόπουλος

#include <stdio.h> #include <string.h> #define N 64 int main(int argc, char *argv[]) { char str[n], match[n], *p; scanf("%63s %63s", str, match); p = strstr(str, match); if (p == NULL) { printf("%s not found\n", match); else { printf("%s found at pos %ld\n", match, p - str); p = strpbrk(str, match); if (p == NULL) { printf("no char in %s found\n", match); else { printf("%c found at pos %ld\n", *p, p - str); return(0); 17 Χρήστος Αντωνόπουλος

Συναρτήσεις βιβλιοθήκης stdio για εκτύπωση σε / ανάγνωση από strings #include <stdio.h> int sprintf(char *str, const char *format,...); int snprintf(char *str, size_t size, const char *format,...); int sscanf(const char *str, const char *format,...); 18 Χρήστος Αντωνόπουλος

sprintf / snprintf / sscanf int sprintf(char *str, const char *format,...); λειτουργεί όπως η printf τα δεδομένα δεν γράφονται την έξοδο αλλά στο str στο τέλος γράφεται και το τερματικό int snprintf(char *str, size_t size, const char *format,...); λειτουργεί όπως η sprint στο str γράφονται το πολύ size χαρακτήρες συμπεριλαμβανομένου και του τερματικού int sscanf(const char *str, const char *format,...); λειτουργεί όπως η scanf τα δεδομένα δεν διαβάζονται από την είσοδο αλλά από το str 19 Χρήστος Αντωνόπουλος

#include <stdio.h> #define N 64 int main(int argc, char *argv[]) { char s1[n], s2[n]; int v, res; float f; sprintf(s1, "%s %d %f", "hello_world", 123, 4.567); printf("%s\n", s1); res = sscanf(s1, "%s %d %f", s2, &v, &f); printf("scanned %d symbols: %s %d %f\n", res, s2, v, f); snprintf(s1, 15, "%s %d %lf", "hello_world", 123, 4.567); printf("%s\n", s1); res = sscanf(s1, "%s %d %f", s2, &v, &f); printf("scanned %d symbols: %s %d %f\n", res, s2, v, f); return(0); 20 Χρήστος Αντωνόπουλος