Προς το περιεχόμενο

Βοήθεια στην κατασκευή ενός προγράμματος c++


gianakakis

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σε ολούς δεν ασχολούμαι πολύ καιρό με τον προγραμματισμό αλλά με ενδιαφέρει πολύ και έχω μάθει αρκετά πράγματα, θα ήθελα να ζητήσω βοήθεια σχετικά με ένα μετρητή που θέλω να ενσωματώσω σε ένα πρόγραμμά μου.Πιο συγκεκριμένα θέλω αυτός ο μετρητής να μου γράφει πόσες φορές εισάγω μία λέξη.Για παράδειγμα οταν γράφω την λέξη forum 5 φορές να γράφει 5.

 

Ευχαριστώ Πολύ

Δημοσ.

Χριστός Ανέστη, Χρόνια Πολλά.

 

Αυτό που θέλεις είναι απλό στην κατασκευή του, απλά όμως για πες μου που αποθηκεύεις τις λέξεις που βάζεις, σε ένα πίνακα από strings, σε ένα αρχείο, κάπου αλλού;

Δημοσ.

Καταρχάς πρέπει να διευκρινίσω και κάτι άλλο το πρόγραμμα είναι console application και θα ήθελα να εισάγω τις λέξεις στην κονσόλα του προγράμματος.

Δημοσ.

Αν κατάλαβα θες να γράφεις πχ

 

kati

kati

kati

kati

 

και στο τέλος να σου γράφει οτι έγραψες 4 φορές kati ή να χεις plain text και μέσα στο κείμενο να σου βρίσκει πόσες φορές έγραψες τη λέξη kati?

Δημοσ.

Θα πρέπει να σκεφτείς ένα τρόπο να βγαίνεις απ το loop αν υποθέσω οτι μετά απο κάθε λέξη πατάς enter. θα σου πρότεινα να το πας χαρακτήρα-χαρακτήρα και όχι string-string

 

πάνω κάτω κάτι τέτοιο δλδ

 

while(1)

{

διάβαζε χαρακτήρες

if (c==character_gia_na_kaneis_escape)break;

else επεξεργάσου τους

}

Δημοσ.

μήπως θα ήταν καλύτερο να γράφω τις λέξεις να πατάω enter μετά από κάθε λέξη και στο τέλος να γράφω για παράδειγμα give results και να μου λέει forum=5 asnwer=12 posts=7.Μίπως ξέρεις πώς να το κάνω αυτό?

Δημοσ.

Μπορείς να χρησιμοποιήσεις το 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;
}
//---------------------------------------------------------------------------

 

Καλή συνέχεια.

Δημοσ.

ευχαριστώ πολύ θα κοιτάξω εάν δουλεύει καθώς εγώ χρησιμοποιώ visual c++ και αν όχι θα διορθώσω τα errors.Ευχαριστώ και πάλι.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...