gianakakis Δημοσ. 27 Απριλίου 2008 Δημοσ. 27 Απριλίου 2008 Καλησπέρα σε ολούς δεν ασχολούμαι πολύ καιρό με τον προγραμματισμό αλλά με ενδιαφέρει πολύ και έχω μάθει αρκετά πράγματα, θα ήθελα να ζητήσω βοήθεια σχετικά με ένα μετρητή που θέλω να ενσωματώσω σε ένα πρόγραμμά μου.Πιο συγκεκριμένα θέλω αυτός ο μετρητής να μου γράφει πόσες φορές εισάγω μία λέξη.Για παράδειγμα οταν γράφω την λέξη forum 5 φορές να γράφει 5. Ευχαριστώ Πολύ
bokarinho Δημοσ. 27 Απριλίου 2008 Δημοσ. 27 Απριλίου 2008 Χριστός Ανέστη, Χρόνια Πολλά. Αυτό που θέλεις είναι απλό στην κατασκευή του, απλά όμως για πες μου που αποθηκεύεις τις λέξεις που βάζεις, σε ένα πίνακα από strings, σε ένα αρχείο, κάπου αλλού;
gianakakis Δημοσ. 27 Απριλίου 2008 Μέλος Δημοσ. 27 Απριλίου 2008 Καταρχάς πρέπει να διευκρινίσω και κάτι άλλο το πρόγραμμα είναι console application και θα ήθελα να εισάγω τις λέξεις στην κονσόλα του προγράμματος.
Mystirios Δημοσ. 27 Απριλίου 2008 Δημοσ. 27 Απριλίου 2008 Αν κατάλαβα θες να γράφεις πχ kati kati kati kati και στο τέλος να σου γράφει οτι έγραψες 4 φορές kati ή να χεις plain text και μέσα στο κείμενο να σου βρίσκει πόσες φορές έγραψες τη λέξη kati?
gianakakis Δημοσ. 27 Απριλίου 2008 Μέλος Δημοσ. 27 Απριλίου 2008 το πρώτο που είπες δεν θέλω να το χρησιμοποιώ σε κείμενο
Mystirios Δημοσ. 27 Απριλίου 2008 Δημοσ. 27 Απριλίου 2008 Θα πρέπει να σκεφτείς ένα τρόπο να βγαίνεις απ το loop αν υποθέσω οτι μετά απο κάθε λέξη πατάς enter. θα σου πρότεινα να το πας χαρακτήρα-χαρακτήρα και όχι string-string πάνω κάτω κάτι τέτοιο δλδ while(1) { διάβαζε χαρακτήρες if (c==character_gia_na_kaneis_escape)break; else επεξεργάσου τους }
gianakakis Δημοσ. 27 Απριλίου 2008 Μέλος Δημοσ. 27 Απριλίου 2008 μήπως θα ήταν καλύτερο να γράφω τις λέξεις να πατάω enter μετά από κάθε λέξη και στο τέλος να γράφω για παράδειγμα give results και να μου λέει forum=5 asnwer=12 posts=7.Μίπως ξέρεις πώς να το κάνω αυτό?
Directx Δημοσ. 27 Απριλίου 2008 Δημοσ. 27 Απριλίου 2008 Μπορείς να χρησιμοποιήσεις το C++ STL MAP container, ο οποίος επιτρέπει την σύνδεση ενός κλειδιού, στην περίπτωση μας το string που εισάγει ο χρήστης, με ένα αντικείμενο ή μεταβλητή, στην περίπτωση μας ένα απλό int το οποίο θα κρατά τον αριθμό εμφάνισης των string που εισάγει ο χρήστης. Η απόδοση τιμών στο MAP γίνεται πολύ εύκολα ως MAP[κλειδί (δηλαδή string)] ίσον τιμή (δηλαδή int) – εμείς για να εξασφαλίσουμε την έναρξη της μέτρησης μας από το 1 για κάθε string που δεν υπάρχει στο MAP, αναζητούμε το string με την βοήθεια της MAP.find(string), αν το string μας υπάρχει ήδη (!=MAP.end()) καταχωρημένο στο MAP τότε απλά αυξάνουμε την τιμή της μεταβλητής με την οποία το έχουμε σύνδεση κατά ένα, δηλαδή MAP->second++ (δηλαδή “, int”) διαφορετικά την θέτουμε σε 1 (MAP[key] = 1). Κατά την έξοδο του προγράμματος, παρουσιάζουμε τα περιεχόμενα του MAP (iterator) στην οθόνη. Το πρόγραμμα κάνει διάκριση μεταξύ πεζών και κεφαλαίων. Το πρόγραμμα έχει δοκιμασθεί στην υλοποίηση του C++ STL που προσφέρει η CodeGear Turbo C++ Explorer. > //-Word Count in C++ STL by Directx (compiler: CodeGear Turbo C++)----------- #include <map> #include <iostream> #include <string> #ifdef __BORLANDC__ #pragma hdrstop #endif //--------------------------------------------------------------------------- #ifdef __BORLANDC__ #pragma argsused #endif int main(int argc, char* argv[]) { // We shall use the C++ MAP container std::map<std::string, int> mapWordDB; std::map<std::string, int>::iterator iterWord; // Infinite for-loop for( ;; ) { static std::string strWord; // Prompt user to enter word std::cout<<"Enter a word (or type \"0\" to abort):"; std::cin>>strWord; // Break? (quit) if(strWord == "0") break; /* * Search MAP container for strWord, if not found store it and set * it's appearance counter to one, else increase it's appearance counter by 1 */ if((iterWord = mapWordDB.find(strWord)) == mapWordDB.end()) mapWordDB[strWord] = 1; else iterWord->second++; } // Dump results on stdout ... std::cout<<std::endl<<"Statistics:"<<std::endl<<std::endl; for(iterWord = mapWordDB.begin(); iterWord!= mapWordDB.end(); iterWord++) std::cout<<"Word:\t"<<iterWord->first<<"\t"<<iterWord->second<<std::endl; // Program finish return 0; } //--------------------------------------------------------------------------- Καλή συνέχεια.
gianakakis Δημοσ. 27 Απριλίου 2008 Μέλος Δημοσ. 27 Απριλίου 2008 ευχαριστώ πολύ θα κοιτάξω εάν δουλεύει καθώς εγώ χρησιμοποιώ visual c++ και αν όχι θα διορθώσω τα errors.Ευχαριστώ και πάλι.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.