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

Σχετικά έγγραφα
Η γλώσσα προγραμματισμού C

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

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

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

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

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

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

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

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

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

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

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

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 2 Ο. Εισαγωγή στην C Εντολές εξόδου Εντολές εισόδου Μορφοποιητές ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

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

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

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

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 9 Ο. Διαχείριση αλφαριθμητικών και πράξεις σε επίπεδο bit ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΙΝΑΤΚΑΣ Ι.

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

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

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

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

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

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

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

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

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

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

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

Προγραμματισμός I (Θ)

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

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

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

ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ. Παράδειγμα 1 Δήλωση και αρχικοποίηση μονοδιάστατου πίνακα [5] με χρήση δομής επανάληψης με συνθήκη στην είσοδο και μετρητή.

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

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

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

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Εισαγωγή στην γλώσσα προγραμματισμού C

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

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

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

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

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

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

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

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

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

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

Γ7.2 Συμβολοσειρές (Strings) Γ Λυκείου Κατεύθυνσης

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

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

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

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

Transcript:

Η γλώσσα προγραμματισμού C Χειρισμός χαρακτήρων, συμβολοσειρές

Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην C δεν υπάρχει ιδιαίτερος τύπος για τον χειρισμό των συμβολοσειρών. Για την αποθήκευση τους χρησιμοποιούμε την δομή του πίνακα τύπου char και φυσικά τις διαχειριζόμαστε όπως ένα πίνακα: char line[80]; // δήλωση συμβολοσειράς με 80 χαρακτήρες line[i] = getchar(); //απόδοση τιμής σε στοιχείο της σειράς Αν πρέπει λοιπόν να διαχειριστούμε Ν χαρακτήρες ο πίνακας της συμβολοσειράς θα πρέπει να δηλωθεί με Ν+1 χαρακτήρες. Υπάρχουν ειδικές συναρτήσεις για τη διαχείριση των συμβολοσειρών (#include <string.h>) 2

Παρατηρήσεις για την αποθήκευση συμβολοσειρών O τελευταίος χαρακτήρας μιας συμβολοσειράς είναι ο «\0» (μηδενικός χαρακτήρας null character). Ο μηδενικός χαρακτήρας «\0» είναι διαφορετικός από τον χαρακτήρα 0 (μηδέν). O μηδενικός χαρακτήρας έχει την τιμή 0 (εσωτερική αναπαράσταση:00000000), ενώ ο χαρακτήρας «0» έχει την τιμή 48 (00110000). Δηλαδή η εντολή: printf(" %d, %d", '\0','0'); // θα δώσει σαν αποτέλεσμα: 0, 48 Οι τιμές που δίνουμε στις μεταβλητές που έχουν δηλωθεί σαν συμβολοσειρές, οριοθετούνται με λατινικά εισαγωγικά διπλά ( " ) ή απλά ( ' ). Προσοχή το 'A' δεν είναι ίσο με το "A" : Το 'A' χρειάζεται 1 byte μνήμης (01000001) Το "A" χρειάζεται 2 bytes ( A, \0 ==> 0100000100000000) Το "A" είναι μία συμβολοσειρά που περιέχει το γράμμα 'A' και στο τέλος τον χαρακτήρα /0'. 3

Αρχικές τιμές (με τη δήλωση) Όπως στους μονοδιάστατους πίνακες: char str1[6 ] = {'h', 'e','l','l','o','\0'}; (Το str1[0] είναι h, tο str1[1] είναι e και το str1[5] είναι \0 ) Εναλλακτικά: char str2[8] = "hello"; //μπαίνει αυτόματα το '\0' στο τέλος Επίσης: char str2[] = "hello"; //το πλήθος υπολογίζεται αυτόματα Αν δώσουμε: char str[20] = "hello"; δεσμεύουμε 20 θέσεις μνήμης ενώ χρειαζόμαστε μόνο 6. Οι θέσεις που περισσεύουν παίρνουν τη τιμή \0. Η εντολή char str[20 ] = {'\0'}; δίνει την τιμή '\0' σε όλα τα στοιχεία της συμβολοσειράς str. H sizeof(str) επιστρέφει το μέγεθος όλου του πίνακα. 4

Διάβασμα από το πληκτρολόγιο scanf(), gets() Με την γνωστή scanf() με χρήση του προσδιοριστή %s: printf ("What's your name :"); scanf( %s, str); Προσοχή: δεν βάζουμε τον χαρακτήρα & μπροστά από το str διότι το str είναι η διεύθυνση του 1ου στοιχείου της συμβολοσειράς. Επίσης προσοχή: Η scanf() σταματά τη ανάγνωση μόλις συναντήσει τον κενό χαρακτήρα (space) ή το χαρακτήρα ελέγχου για τη αλλαγή γραμμής ('\n'). Εναλλακτικά, για το διάβασμα μιας συμβολοσειράς από το πληκτρολόγιο μπορούμε να χρησιμοποιήσουμε τη συνάρτηση gets(): printf("what's your name:"); gets(name); H gets() διαβάζει συνεχώς από το πληκτρολόγιο μέχρι να συναντήσει τον χαρακτήρα '\n' (ακόμα και τους κενούς χαρακτήρες). Αντικαθιστά δε τον '\n' με τον '\0'. 5

Εμφάνιση συμβολοσειρών στη οθόνη Με την συνάρτηση printf() και τον προσδιοριστή %s: printf( To onoma sou einai: %s\n", onoma); Η printf() εμφανίζει όλους τους χαρακτήρες μέχρι να συναντήσει το μηδενικό χαρακτήρα '\0'. Με την printf() μπορούμε να εμφανίσουμε μέρος της συμβολοσειράς: printf( To onoma sou einai: %s\n", onoma+2); (εμφανίζει την συμβολοσειρά από τον 3 ο χαρακτήρα και μετά) Με τη συνάρτηση puts(): printf("what's your name:"); gets(name); printf("hello "); puts(name); Η puts() μετά την εμφάνιση της συμβολοσειράς, τυπώνει τον χαρακτήρα '\n'. 6

Τρεις διαφορετικοί τρόποι να διαβάσουμε μια συμβολοσειρά #include <stdio.h> main() { // με scanf() & printf() char line [20]; printf("enter line: "); scanf("%s", line); printf("line: %s\n", line); } #include <stdio.h> main() { // με gets() & puts() char line[30]; printf("enter line: "); gets(line); printf("line: "); puts(line); } #include <stdio.h> main() { // με την getchar(); char line[30], ch; int i = 0; printf("enter line: "); while(ch!= '\n') { //μέχρι το newline ch = getchar(); line[i] = ch; i++; } line[i] = '\0'; // για να γίνει συμβολοσειρά printf("line: %s", line); } 7

Άλλοι τρόποι με το getchar() int i; char line[80]; i = 0; //διαβάζει χαρακτήρες μέχρι να διαβαστεί ο '\n' while( (line[i]=getchar( ))!= '\n' ) i++; //δεν πρέπει να ξεχνάμε το '\0' στο τέλος line[i]='\0'; printf("diavasa %d xaraktires\n", i); //Το ίδιο με άλλο τρόπο while( (line[i++]=getchar( ))!= '\n' ); line[i] = '\0'; Αν οι χαρακτήρες είναι περισσότεροι από 80; 8

Συναρτήσεις του <string.h> Στη C υπάρχουν μια σειρά από συναρτήσεις για το χειρισμό των συμβολοσειρών (υπάρχουν στo <string.h>). Η ύπαρξη του μηδενικού χαρακτήρα είναι απαραίτητη για εκτελούνται σωστά αυτές οι ειδικές συναρτήσεις. Κάποιες από αυτές είναι: strcpy(s1, s2); Αντιγράφει το s2 στο s1. strcat(s1, s2); Συνενώνει τη s2 στο τέλος της s1. strlen(s1); Επιστρέφει το μήκος (σε χαρακτήρες) του s1. strcmp(s1, s2); Επιστρέφει 0 αν τα s1 και s2 είναι ίδια. Μικρότερο του 0 αν s1<s2. Μεγαλύτερο του 0 αν s1>s2. strchr(s1, ch); Επιστρέφει τον δείκτη της πρώτης εμφάνισης του χαρακτήρα ch στη συμβολοσειρά s1. strstr(s1, s2); Επιστρέφει τον δείκτη της πρώτης εμφάνισης της συμβολοσειράς s2 στη συμβολοσειρά s1. 9

Παράδειγματα με τις συναρτήσεις των συμβολοσειρών #include <stdio.h> #include <string.h> main () { char str1[12] = "Hello"; char str2[12] = "World"; char str3[12]; int len ; strcpy(str3, str1); /* αντιγράφει str1 στο str3 */ printf("strcpy( str3, str1) : %s\n", str3 ); strcat( str1, str2); /* ενώνει str1 και str2 */ printf("strcat( str1, str2): %s\n", str1 ); len = strlen(str1); /* το μήκος του str1 μετά τη συνένωση */ printf("strlen(str1) : %d\n", len ); } 10