Anfängerfragen zu einem Projekt mit Klassen



  • Hallo @all,

    ich bin noch ziemlicher Anfänger in C++ und möchte mich daher mal näher mit Klassen und deren Eigenschaften/Methoden beschäftigen.
    Ich würde gern ein Programm schreiben, was eine txt Datei auslesen kann und ich direkt dort, wenn ich ein Wort suche, er es findet und mir anzeigt wie oft es vorhanden ist.

    wer lust hat kann mir ein paar tipps geben wie ich dieses Programm realisieren kann..

    // Aktuell -> Lese letzten Beitrag

    gruß
    Venti 🙂



  • Dann zeig uns doch einfach was du schon hast, und wo deine Probleme sind. Wir geben dann Verbesserungsvorschläge.



  • ja um ehrlich zu sein habe ich noch nichts, ich weiss nicht wie ich beginnen soll

    ich komme da immer durcheinander...



  • ventilatores schrieb:

    ja um ehrlich zu sein habe ich noch nichts, ich weiss nicht wie ich beginnen soll

    ich komme da immer durcheinander...

    Man kann sich nur wiederholen: Grundlagen lernen...



  • Dann mach es einfach schritt für schritt. Leg zunächst leere Klassen an, dann gibst du denen eigenschaften und leere Methoden zum schluss dann die MEthoden ausarbeiten. Zwischendurch immer wieder Compilieren um zu gucken ob soweit alles in ordnung ist. Manchmal kann es auch helfen wenn man sich das ganze vorher modelliert(aufmalt) um sich klar zu werden wie man das Programm aufbauen möchte.



  • @Kóyaánasqatsi - ja sorry, aber solch Klugscheisser getue hilft mir nicht weiter!
    Ich sitze hier mit einem Buch: Einstieg in C++ von Arnold W. und lese mir die ganze Zeit was über Klassen durch!

    @Toplan - ja das habe ich schon gemacht


  • Mod

    ventilatores schrieb:

    @Kóyaánasqatsi - ja sorry, aber solch Klugscheisser getue hilft mir nicht weiter!
    Ich sitze hier mit einem Buch: Einstieg in C++ von Arnold W. und lese mir die ganze Zeit was über Klassen durch!

    Wenn man andere Leute um Hilfe fragt und deren (gute) Ratschläge dann als Klugscheißerei beschimpft, wird man kaum nochmals Hilfe bekommen.

    @Toplan - ja das habe ich schon gemacht

    Dann zeig doch mal her! Und verwende dabei die cpp-tags, ich habe das Gefühl, dass du so einer bist, der den Code hier als normalen Text hinschreiben würde.



  • Dein Denkansatz ist ein falscher (oder ungeeigneter). Klassen machen (primär) nichts. Klassen sind etwas.

    Die Dinge, die du beschrieben hast, sind m. E. klassische Anwendungsfälle für Funktionen. Sich damit die Grundlagen anzueignen wird erstmal schwierig.

    Klassische (Schul-)Beispiele für Klassen sind:

    - Konto
    - Fahrzeug

    etc.

    Grüße... Heiko



  • ja Entschuldigung, die von Kóyaánasqatsi angegebene Seite ist ganz gut und die Klassen sind besser als in meinen Buch beschrieben....

    ich versuche es nochmal selbst...



  • Versuch doch erstmal einen BeispielCode für eine Klasse und ihre Verwendung zu finden. Wenn du dann an einzelnen Stellen noch Probleme hast, die sich nicht googeln lassen, dann können wir dir hier gern weiterhelfen 🙂



  • [cpp]Ctext_analyse.h
    
    [cpp]#pragma once
    
    class Ctext_analyse
    { private:
    	char* text;
        int lang;
    
    	void datei_laden();
    
    public:
    	Ctext_analyse(void);
    	~Ctext_analyse(void);
    };
    //---------------------------------
    Ctext_analyse.cpp
    
    #include "Ctext_analyse.h"
    #include <fstream>
    using namespace std;
    
    Ctext_analyse::Ctext_analyse(void)
    {
    }
    
    Ctext_analyse::~Ctext_analyse(void)
    {
    }
    
    void Ctext_analyse::datei_laden()
    {
    
    	// Datei f. Eingabe und oeffnen
    	fstream inout ("collection.txt",ios::in);
    	// aktuelle Position = File Anfang
    	lang = 20000;
    	text  = new char[lang+1];
    	inout.read(text, lang); // Datei lesen
    	lang = inout.gcount(); // wie lang ist die Datei denn wirklich
    	inout.close(); 
    	text[lang]= 0; // macht genau am Ende des Textes Schluss
    
    	cout << text << endl;
    }
    //----------------------------------------------
    projekt.cpp
    
    #include<iostream>
    #include <fstream>
    
    using namespace std;
    
    #include "Ctext_analyse.h"
    
    int main()
    {
    
    	Ctext_analyse ta;
    
            ta.datei_laden();
    
    	return 0;
    }
    

    Problem:

    mit welchen Befehl kann ich jetzt einzelne Wörter raussuchen?

    vielen dank.

    Venti



  • die auszulesende Datei ist 16,6 kb groß, deshalb habe ich 20000 angegeben und Zeile 41-43 hilft mir dabei.



  • Hallo,

    hier mal ein paar Ansätze:
    1. ich fände std::string hier um einiges geeigneter ...
    2. was ist das mit dem 'lang'?, lies doch einfach bis zum Ende der Datei
    3. um die Wörter zu zählen könnte man ne std::map nehmen

    Gruß Simon



  • hi varginator,

    ich würde doch lieber so fortfahren

    Ctext_analyse::datei_suchen(void)
    { 
    
    }
    

    und ein/mehrere Schleifen bauen. // so einfach wie möglich erstmal

    ich seh hier noch nich ganz durch -> std::map

    gruß
    Venti



  • ventilatores schrieb:

    ...so einfach wie möglich erstmal...

    Dann solltest du dennoch mindestens std::string betrachten (Die C++ Stringklasse).

    std::vector und std::map sind sehr häufig eingesetzte Containerklassen (std::vector kannst du dir als Array vorstellen, das bei Bedarf die Größe verlängert, std::map wiederum kann man als Lexikon betrachten: Ein Container mit Schlüssel/Wertepaaren). In der Regel ist nur der Ersteinstieg etwas komplizierter, sie erleichtern aber vieles.

    cu André



  • naja, ich habe ehrlich gesagt Angst das ich alles wieder vermurkse und nichts mehr geht.
    Ich habe erstmal so angefangen und gehe dann systematisch vor...

    aber das mit den container Klassen hört sich ganz interessant an.

    void Ctext_analyse::datei_suchen(void)
    { 
    	int i;
    	for(i=0; i<lang; i++);
    	{
    		cout << text[i] << endl;
    	}
    // erst jetzt kann ich nach den Buchstaben suchen
    
    }
    


  • Hier z.B. lernst du, wie Dateien mittels C++ Zeilenweise ausgelesen werden:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39469.html

    Dann musst die einzelnen Worte anhand von Trennzeichen ( punkt, komma, leerzeichen ) herausfiltern. Dabei kann dir std::string aus der STL weiterhelfen.

    Am besten du beginnst erstmal mit dem sauberen Einlesen der Datei in einen std::vector und dann schaust du dir die vielfältigen Möglichkeiten der std::string an ( http://www.cplusplus.com/reference/string/string/ ) und überlegst dir ein Konzept, wie du am besten die Worte filterst.

    Und wenn du was hast, können wir uns das angucken und dir im Zweifelsfall helfen 🙂

    Edit: Tippfehler korrigiert 😃



  • ja das ist gut, weil ich komme bei meiner Zählervariable grad nicht weiter.
    Er gibt mir zwar alle r aus aber er soll sie anders darstellen

    void Ctext_analyse::datei_suchen(void)
    { 
    	int i;
    	for(i=0; i<lang; i++)// erst jetzt kann ich nach den Buchstaben suchen
    	{
    		if('r'==text[i])
    		cout << text[i] << endl;
    	}
    
    }
    


  • Wie solln sie den anders dargestellt werden?

    ... bei der for-Schleife musst du nicht schon vorher definieren

    for(int i = 0; ...
    

    Gruß Simon



  • @venti

    Vorhin wolltest du noch Wörter zählen oder suchen.
    Jetzt suchst du nach einzelnen Buchstaben...

    Was genau willst du jetzt eigentlich? 🙂



  • ... Wenn du natürlich nur die Buchstaben zählen willst, dann reicht auch ein std::vector<int> oder ein std::map<char, int> ...

    Gruß Simon


Anmelden zum Antworten