Anfängerfragen zu einem Projekt mit Klassen



  • 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



  • ja, ich muss doch mal alles probieren und nur so kann ich lernen und ey bekomm ich hier nich mal ein Lob, ich hab mir alles allein zusamm geknistert!

    void Ctext_analyse::datei_suchen(void)
    { 
    	int i; 
    	int z=0; 
    	for(i=0; i<lang; i++)
    	{
    		if('r'==text[i]) // text[i] an der Stelle i wird auf gleichheit mit r geprüft, wenn dann true wird
    			{
    			z=z+1;		
    			}
    	}
    	cout << "Anzahl: "<<z/*text[i]*/ << endl;  
    }
    

    **
    Nocmal zum Programm!**

    ich will ein Wort suchen das mit r beginnt und er soll mir alle Wörter mit r beginnend ausgeben, so wie google

    ja und ich komm bei der Schleife nicht weiter, jemand ne Idee 😃

    gruß
    Venti



  • ventilatores schrieb:

    und ey bekomm ich hier nich mal ein Lob, ich hab mir alles allein zusamm geknistert!

    Braver venti, das hast du gut gemacht! :p
    (Weshalb erwartest du für etwas Code schreiben ein Lob?)

    ventilatores schrieb:

    ich will ein Wort suchen das mit r beginnt und er soll mir alle Wörter mit r beginnend ausgeben, so wie google

    Dann schau doch, ob vor dem 'r' jeweils ein Whitespace steht (Leerzeichen/Zeilenende/Tabulator), falls ja, beginnt dort ein Wort...



  • Du könntest ja schaun ob

    Nexus schrieb:

    ... vor dem 'r' jeweils ein Whitespace steht (Leerzeichen/Zeilenende/Tabulator), falls ja, beginnt dort ein Wort...

    ... und ob danach noch mindestens ein Zeichen kommt ...

    Falls du aber abprüfen willst, ob auch nur buchstaben nach dem 'r' kommen musst du schon mehr prüfen, oder per RegEx (Regular Expression) ...

    Gruß Simon



  • morjens,

    ich probiere das Wort "Wert" in meine Text zu suchen und die Anzahl der gefundenen Wörter (Wert) anzuzeigen, wo ist hier mein Denkfehler?

    void Ctext_analyse::datei_suchen(void)
    { 
    	int i; 
    	int wert;
    	int z=0; 
    	cout << "Welches Wort suchen Sie?" << endl;
    	cin >> wert;
    	for(i=0; i<lang; i++)
    	{
    		if('wert'==text[i]) 
    			{
    			z=z+1;		
    			}
    			cout << "*";
    	}
    	cout << "Anzahl: "<<z<< wert << endl; 
    
    }
    

    gruß
    Vetila....tores



  • Jetz suchst du ein eingegebenes Wort zu suchen, was willst du denn nun? ...

    void Ctext_analyse::datei_suchen(void)
    {
        int i;
        int wert;
        int z=0;
        cout << "Welches Wort suchen Sie?" << endl;
        cin >> wert;
        for(i=0; i<lang; i++)
        {
            if('wert'==text[i]) // Wieso liest du dann erst ein Wort ein?
                {               // Außerdem verlgeichst du einen string mit einem buchstaben ...
                z=z+1;       
                }
                cout << "*";
        }
        cout << "Anzahl: "<<z<< wert << endl;
    }
    

    Du musst erstmal klar ausdrücken was du überhaupt machen willst und nicht wie du es machen willst ...

    ... wenn es ums Wörterzählen geht, dann ist z.B. eine std::map<std::string, int> möglich ....

    Gruß Simon



  • Hast du denn inzwischen mal versucht die Datei Zeilenweise einzulesen und einzelne Wörte herauszufiltern? Genug Tipps hast du ja eigentlich bekommen 🙂



  • relax, relax, ja ich muss char benutzen...

    nachdem ich ja gestern es geschafft hatte die Anzahl von r zu ermitteln und auf der Konsole auszugeben wollte ich heute alles ein wenig schicker gestalten.
    Also ich probiere etwas rum, da muss man schon etwas flexibel mit mir sein.
    Ist ja klar das man als Anfänger erstmal hin und her macht...

    void Ctext_analyse::datei_suchen(void)
    { 
    	int i; 
    	int z=0; 
    	for(i=0; i<lang; i++)
    	{
    		if('r'==text[i]) 
    			{
    			z=z+1;		
    			}
    	}
    	cout << "Anzahl: "<<z<< endl; 
    	}
    

    Also aktuell will ich ein Wort suchen das auf der Konsole augegeben wird und mir die Anzahl angezeigt wird.

    Ich wollte alles in einer Schleife packen, ist das o.k.? oder besser mehrere Schleifen, hm.....hab da ne Denkblockade grade

    gruß
    Venta



  • Hier mal n paar Denkansätze:

    - überlege dir, wie du die Wörter brauchst
    -> musst du beim Speichern beachten
    - mit was willst du das eingelesene Vergleichen/oder Zählen
    -> geeigneten Container finden, der die Anzahl pro Wort speichert
    - sieh' dir nochmal alle geposteten Sachen an und überlege ob die Ratschläge dir helfen können

    Du darfst gerne Fragen stellen, aber bitte so, dass es jeder versteht und du am besten schon ein bisschen Code von deinen Ansätzen zeigst ...

    ... es ist nicht schlimm, wenn du dein Programm erweitern willst, aber du bist mit deimen Code immer noch so weit wie zu Anfang (wartest du etwa auf eine Musterlösung?) ...



  • void Ctext_analyse::datei_suchen(void)
    
    { 
    	FILE *fp;
       int i;
       char text[255];
       char suchwort[2][20]={"wert","so"};
       int AnzahlSuchwoerter=2;
       char* ptr;
    
       fp = fopen ("collection.txt","rt");
       if (fp==NULL)
       {
          printf("Fehlen von diso_b_text.ini\r\n");
       }
       else
       {
          i=0;
          while ( feof( fp ) != EOF )
          {
    
             fgets(text,255, fp);
    
             for(int i =0;i<AnzahlSuchwoerter;i++)
             {
                ptr = strstr (text,suchwort[i]);
    
                if ( ptr != NULL )
                {
                   printf("%s ",suchwort[i]);
                   //printf("%s\r\n",text);
    
                }
             }
          }
       }
    
    }
    


  • wie bekomme ich es jetzt Ordentlich ausgegeben, also die Anzahl von ... beträgt ...


Anmelden zum Antworten