ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αλφαριθμητικά (Strings)
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 2 Χαρακτήρες Αναπαριστώνται από έναν δυαδικό αριθμό 8 δυαδικών ψηφίων (8 bits) (256 διαφορετικές τιμές) Η κωδικοποίησή τους έχει τυποποιηθεί με τον κώδικα ASCII Εκτός από γράμματα και ψηφία υπάρχουν και πολλοί ειδικοί χαρακτήρες Σταθερές χαρακτήρων – Η έκφραση 'z' είναι μια σταθερά και αντιστοιχεί σε έναν int με τα 8 τελευταία του bits ίσα με τον ASCII κωδικό του χαρακτήρα – 'z‘, ‘\t‘, ‘\n‘, κτλ
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 3 Βασικά για τα Αλφαριθμητικά (strings) Μια σειρά από χαρακτήρες που αντιμετωπίζονται σαν ένα αντικείμενο – Γράμματα, αριθμοί, ειδικοί χαρακτήρες ( *, /, $ ) και όλοι οι εκτυπώσιμοι χαρακτήρες – Τιμές εισάγονται μέσα σε διπλά εισαγωγικά "Hello" – Τα Strings είναι πάντα πίνακες από χαρακτήρες Ένα String είναι δείκτης στον 1 ο χαρακτήρα του πίνακα Τιμή του string είναι η διεύθυνση του 1 ου χαρακτήρα του πίνακα
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 4 Δηλώσεις Δηλώσεις αλφαριθμητικών – Σαν πίνακας από χαρακτήρες ή σαν δείκτης σε χαρακτήρα char * char color[] = "blue"; char *colorPtr = "blue"; – Κάθε string τελειώνει με '\0' και πρέπει να το λαμβάνουμε υπόψη στη δήλωση του πίνακα color has 5 elements
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 5 Ανάγνωση Διάβασμα strings – Χρήση scanf scanf("%s", word); Αντιγράφει στο word[] Δεν χρειάζεται & (επειδή είναι και δείκτης) – Αφήνουμε χώρο στον πίνακα και για το '\0'
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης 1 2 3#include 4 5int main() 6{6{ 7 char string1[ 20 ], string2[] = "string literal"; 8 int i; 9 10 printf(" Enter a string: "); 11 scanf( "%s", string1 ); 12 printf( "string1 is: %s\nstring2: is %s\n“, string1, string2 ); 13 printf("string1 with spaces between characters is:\n“); for ( i = 0; string1[ i ] != '\0'; i++ ) 17 printf( "%c ", string1[ i ] ); printf( "\n" ); 20 return 0; 21} Enter a string: Hello there string1 is: Hello string2 is: string literal string1 with spaces between characters is: H e l l o
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 7 Παραδείγματα Πρόβλημα : Εκτυπώστε ανάστροφα το κείμενο που θα διαβαστεί από την οθόνη. #include #define N 100 void inversion(char *s) { int i; for (i = strlen(s)-1; i >= 0; --i) printf("%c",s[i]); printf(“\n”); } int main() { char s[N]; printf("Dwste mia le3h mexri %d xarakthres\n",N); scanf("%s",s); inversion(s); return 0; }
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 8 Διαχείριση Αλφαριθμητικών Βρίσκονται στο Μετατρέπουν αλφαριθμητικά (αν είναι κατάλληλα) σε αριθμητικές τιμές
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 9 Συναρτήσεις Ανάγνωσης και Εκτύπωσης Βρίσκονται στο int sprintf(char *s, const char *format, …)Ισοδύναμη με την printf μόνο που η έξοδος είναι στο string s και όχι στην οθόνη int sscanf(char *s, const char *format, …)Ισοδύναμη με την scanf μόνο που η είσοδος είναι από το string s και όχι από το πληκτρολόγιο char s[100]; char f[] = " "; 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);
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 10 Χρήσιμες Συναρτήσεις (string.h) size_t strlen( const char *s ); – Επιστρέφει τον αριθμό των χαρακτήρων πριν το ‘\0’ που βρίσκονται στο s (το μήκος string) char *strdup(const char *s1); – Δεσμεύει όση μνήμη χρειάζεται και αντιγράφει σε αυτήν το αλφαριθμητικό στο s1. Επιστρέφει την καινούργια μνήμη με το καινούργιο αντίγραφο του s1. Η δεσμευμένη μνήμη χρειάζεται να αποδεσμευτεί στο τέλος με την free.
ΗΥ150 – Προγραμματισμός Κώστας Παναγιωτάκης 11 Συναρτήσεις σύγκρισης (string.h) Σύγκριση αλφαριθμητικών – Συγκρίνονται οι ASCII κώδικες των χαρακτήρων int strcmp( const char *s1, const char *s2 ); – Συγκρίνει το s1 με το s2 – Επιστρέφει αρνητικό αριθμό αν s1 s2