Castiello Δημοσ. 10 Ιουνίου 2012 Δημοσ. 10 Ιουνίου 2012 (επεξεργασμένο) strtok() Επεξ/σία 12 Ιουνίου 2012 από Castiello
Directx Δημοσ. 10 Ιουνίου 2012 Δημοσ. 10 Ιουνίου 2012 (επεξεργασμένο) Το ζητούμενο δεν είναι δύσκολο, λογικά έχετε διδαχθεί την strtok η οποία επιτρέπει την διάσπαση ενός αλφαριθμητικού σε τμήματα με βάση μια συγκεκριμένη διάταξη χαρακτήρων (πχ. κενό). Από εκεί και πέρα η καταμέτρηση των μικρών χαρακτήρων μπορεί να γίνει είτε με την χρήση δεικτών (όπως σε αυτό το παράδειγμα) είτε μέσο πίνακα (με ένα for-loop), τώρα με βάση ότι η χρήση της strtok είναι γνωστή, υπολογίζω ότι θα έχετε κάνει δείκτες (ή όχι; ..) οπότε ο παρακάτω κώδικας δεν είναι δύσκολο να καταλάβεις τι κάνει. > /* islower demo, xdir */ #include <stdio.h> #include <string.h> #include <ctype.h> int main(void) { /* Input string (should be \0 terminated!) */ char Input[] = { "Then one night his grandfather reminded him of the key. " "The grey old scholar, as vivid as in life, spoke long and " "earnestly of their ancient line, and of the strange visions " "of the delicate and sensitive men who composed it. He spoke " "of the flame-eyed Crusader who learnt wild secrets of the Saracens " "that held him captive; and of the first Sir Randolph Carter who studied " "magic when Elizabeth was queen." }, *Token = NULL; /* Break string to space delimited tokens */ if((Token = strtok(Input, " "))) do { char *ptrChr = Token; int LowCC = 0; printf("\"%s\" = { ", Token); /* Count & print lowercased characters */ while(*ptrChr) { if(islower(*ptrChr)) { putchar(*ptrChr); LowCC++; } ptrChr++; } /* Print statistics */ printf(" } (%d)\n", LowCC); /* Move to next token? .. */ }while((Token = strtok(NULL, " "))); puts("\nPress Enter to exit.."); getchar(); return 0; } ΕΙΣΟΔΟΣ: Then one night his grandfather reminded him of the key. The grey old scholar, as vivid as in life, spoke long and earnestly of their ancient line, and of the strange visions of the delicate and sensitive men who composed it. He spoke of the flame-eyed Crusader who learnt wild secrets of the Saracens that held him captive; and of the first Sir Randolph Carter who studied magic when Elizabeth was queen. ΕΞΟΔΟΣ: > "Then" = { hen } (3) "one" = { one } (3) "night" = { night } (5) "his" = { his } (3) "grandfather" = { grandfather } (11) "reminded" = { reminded } (8) "him" = { him } (3) "of" = { of } (2) "the" = { the } (3) "key." = { key } (3) "The" = { he } (2) "grey" = { grey } (4) "old" = { old } (3) "scholar," = { scholar } (7) "as" = { as } (2) "vivid" = { vivid } (5) "as" = { as } (2) "in" = { in } (2) "life," = { life } (4) "spoke" = { spoke } (5) "long" = { long } (4) "and" = { and } (3) "earnestly" = { earnestly } (9) "of" = { of } (2) "their" = { their } (5) "ancient" = { ancient } (7) "line," = { line } (4) "and" = { and } (3) "of" = { of } (2) "the" = { the } (3) "strange" = { strange } (7) "visions" = { visions } (7) "of" = { of } (2) "the" = { the } (3) "delicate" = { delicate } (8) "and" = { and } (3) "sensitive" = { sensitive } (9) "men" = { men } (3) "who" = { who } (3) "composed" = { composed } (8) "it." = { it } (2) "He" = { e } (1) "spoke" = { spoke } (5) "of" = { of } (2) "the" = { the } (3) "flame-eyed" = { flameeyed } (9) "Crusader" = { rusader } (7) "who" = { who } (3) "learnt" = { learnt } (6) "wild" = { wild } (4) "secrets" = { secrets } (7) "of" = { of } (2) "the" = { the } (3) "Saracens" = { aracens } (7) "that" = { that } (4) "held" = { held } (4) "him" = { him } (3) "captive;" = { captive } (7) "and" = { and } (3) "of" = { of } (2) "the" = { the } (3) "first" = { first } (5) "Sir" = { ir } (2) "Randolph" = { andolph } (7) "Carter" = { arter } (5) "who" = { who } (3) "studied" = { studied } (7) "magic" = { magic } (5) "when" = { when } (4) "Elizabeth" = { lizabeth } (8) "was" = { was } (3) "queen." = { queen } (5) Press Enter to exit.. Καλή τύχη και ..διάβασμα Υ.Γ. Χάριν απλότητας δεν ασχολούμαστε με τα σημεία στίξης του κειμένου. --EDIT: Τροποποίηση στην δήλωση Input. Επεξ/σία 10 Ιουνίου 2012 από Directx
migf1 Δημοσ. 10 Ιουνίου 2012 Δημοσ. 10 Ιουνίου 2012 Φίλε xdir (έτσι θα σε γράφω στο εξής, είναι πολύ πιο σύντομο ) σε C++ builder έγινε compile ο παραπάνω κώδικας; Ρωτάω γιατί λογικά με το *Input ορισμένο ως immutable όπως το έχεις, θα βαρέσει seg-fault η strtok() μιας και θα επιχειρήσει να το διασπάσει . Πρέπει να οριστεί ως Input[ ] = "bla bla bla". ΥΓ. Πάω να το δοκιμάσω EDIT: Yeap, seg-fault στην strtok() ο gcc.
Directx Δημοσ. 10 Ιουνίου 2012 Δημοσ. 10 Ιουνίου 2012 Φίλε xdir (έτσι θα σε γράφω στο εξής, είναι πολύ πιο σύντομο ) σε C++ builder έγινε compile ο παραπάνω κώδικας; Ρωτάω γιατί λογικά με το *Input ορισμένο ως immutable όπως το έχεις, θα βαρέσει seg-fault η strtok() μιας και θα επιχειρήσει να το διασπάσει . Πρέπει να οριστεί ως Input[ ] = "bla bla bla". ΥΓ. Πάω να το δοκιμάσω EDIT: Yeap, seg-fault στην strtok() ο gcc. Σε C++ Builder περνάει δίχως προβλήματα, όμως αυτό δεν έχει καμία σημασία διότι είναι παράλειψη. Υ.Γ. Σε VS08 ομοίως με GCC.
migf1 Δημοσ. 10 Ιουνίου 2012 Δημοσ. 10 Ιουνίου 2012 Το περνάει ο builder ε; Κουφό! ΥΓ. Δεν το διορθώνεις και στον κώδικα παραπάνω για να είναι λειτουργικός παντού; EDIT: ... Υ.Γ. Σε VS08 ομοίως με GCC. Και σε Pelles C επίσης.
Directx Δημοσ. 10 Ιουνίου 2012 Δημοσ. 10 Ιουνίου 2012 Το περνάει ο builder ε; Κουφό! ΥΓ. Δεν το διορθώνεις και στον κώδικα παραπάνω για να είναι λειτουργικός παντού; Yeap, ready! Περνά και σε C++ Builder & VS08. .. Ναι ο C++ Builder έχει μερικές ιδιορρυθμίες, για αυτό βάζω πάντα ένα DISCLAIMER ότι αυτός ο πηγαίος κώδικας έχει δοκιμασθεί σε C++ Builder κλπ. αλλά σήμερα το αμέλησα (άσε ότι εδώ και μερικές εβδομάδες γράφω ακατάπαυστα σε Java για Android οπότε η σχέση μου με την C έχει ατονήσει!!)
moukoublen Δημοσ. 10 Ιουνίου 2012 Δημοσ. 10 Ιουνίου 2012 Τι έγινε;;; Γιατί εδώ έπεσε η απάντηση κατευθείαν;;;
firewalker Δημοσ. 10 Ιουνίου 2012 Δημοσ. 10 Ιουνίου 2012 Γιατί για να την καταλάβει πρέπει να διαβάσει. Επίσης δεν νομίζω ο καθηγητής να δεχτεί την strtok(). Λογικά θα είχε στο μυαλό στου έναν πολύ απλό parser.
Castiello Δημοσ. 10 Ιουνίου 2012 Μέλος Δημοσ. 10 Ιουνίου 2012 σας ευχαριστω πολυ παιδια η αληθεια ειναι οτι δεν την εχουμε κανει την strtok()!!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα