Datei nach bestimmter Buchstaben Kombination durchsuchen


  • Administrator

    pumuckl schrieb:

    Firefighter schrieb:

    Hier ein paar Tips,mach bitte niemals den namespace über "using namespace std;" global bekannt,nutze dafür lieber den Namensraumauflöser std:: .

    Das "niemals" geht hier denn doch ein wenig zu weit. Innerhalb einer Sourcedatei, die nirgendwo per #inlcude eingebunden ist, kann man durchaus eine using direktive benutzen. Die sollte allerdings nach allen #inlcudes in der Datei stehen. So wie ers gemacht hat in der main.cpp ist das durchaus in Ordnung.

    Oder am besten gleich so lokal (in einem Scope) wie möglich oder gar nicht. Erst vor einem oder zwei Monaten hatte doch hier im Forum jemand Probleme, weil er global im *.cpp ein using namespace std; hatte.
    *mag sich da an irgendsowas erinnern*

    std:: ist ja auch wirklich keine Sache noch zusätzlich zu schreiben. Und es ist dann auch gleich klar, woher es kommt. Aber naja, jedem das seine. Ich schreibe using namespace std; halt lieber einmal zu wenig hin, als einmal zu viel 🙂

    pumuckl schrieb:

    #include <windows> //<--brauchst du hier gar nicht
    

    Stimmt, aber <windows.h> wird nötig sein für das system("PAUSE"), wenn ich nicht irre.

    Ehm, nein, man braucht <cstdlib> :
    http://www.cplusplus.com/reference/clibrary/cstdlib/system/

    Grüssli



  • Für system() braucht man cstdlib und "PAUSE" ist ja nur eine Systemfunktion. Wenn man unter Windows in der cmd.exe einfach PAUSE eingibt und abschickt, wird man aufgefordert eine beliebige Taste zu drücken. Da "PAUSE" auch nur ein Stringliteral ist, sollte dafür kein Windows-Header nötig sein. Unter Linux-Systemen wird das auch kompilieren, aber ich glaube auf Linux-Systemen gibt es kein PAUSE, somit ist es nicht portabel.

    Hier noch 2 FAQ-Einträge zu system bzw. Pause:
    Automatisches Schließen verhindern
    wieso man die Funktion system meiden soll

    // zu langsam...

    Greetz



  • Aber naja, jedem das seine. Ich schreibe es halt lieber einmal zu wenig hin, als einmal zu viel 🙂

    Du meinst wohl sicherlich, du schreibst std:: einmal mehr hin als einmal zu wenig?


  • Administrator

    Firefighter schrieb:

    Aber naja, jedem das seine. Ich schreibe es halt lieber einmal zu wenig hin, als einmal zu viel 🙂

    Du meinst wohl sicherlich, du schreibst std:: einmal mehr hin als einmal zu wenig?

    Nein, ich shcreib halt lieber einmal using namespace std; zu wenig hin, als einmal zu viel 🙂
    Gut, ich hätte das "es" näher spezifizieren sollen, ich korrigiere es mal schnell.

    Grüssli



  • Achhsooo...ja ok,lass uns daraus aber keine Grundsatzdiskussion entstehen sonst hat der Thread nachher wieder 200mrd Seiten :p. Jetzt weiß ich ja was du meinst.:)


  • Administrator

    Firefighter schrieb:

    Achhsooo...ja ok,lass uns daraus aber keine Grundsatzdiskussion entstehen sonst hat der Thread nachher wieder 200mrd Seiten :p. Jetzt weiß ich ja was du meinst.:)

    Nein, auf gar keinen Fall. Ich wollte nur dass der Threadersteller noch eine andere Meinung hört/liest. Die meisten Anfänger nutzen dann allerdings trotzdem using namespace std; weiter, weil sie zu faul sind. Bringt also nicht viel, aber was solls 🙂

    Man sollte vielleicht mal einen FAQ Beitrag machen, wo alle Argumente für und dagegen der verschiedenen Parteien aufgelistet sind. Dann könnte man jeweils nur noch darauf verweisen. 😉
    Aber das wird nun ein wenig sehr Off-Topic ...

    Grüssli



  • Mhhm ist leider nicht das was ich meinte.

    Wenn in dem string z.b. nur diese 2 Buchstaben stehen "ha"
    Dann soll das Programm in der Datei gucken welches Wort mit "ha" anfängt.

    Wenn es diese Stelle gefunden hat dann soll es das Komplette Wort aus der Datei auslesen. Also ha = Haus

    z.b. als Programm Ausgabe

    cout<<"ha ist die abkürzung für " << variable <<"und steht an position "<<position;   // variable = haus
    


  • Hab so eine funktion auch schon mal verwendet. Hab des mal in deinen Code eingefügt wie ich es verwendet habe, habs jedoch noch ned getestet:

    for (int i=0;i<3;i++){
    	getline(datei,zeile[i] );
    	cout<<zeile[i]<<endl;
    
    	if(found = zeile[i].find("test", 0) != string::npos){
    		cout<<"test wurde gefunden";
    		break;
    	};
    }
    


  • 🙂 Danke funktioniert ich musste es nur etwas ab ändern.

    #include <iostream>
    #include <fstream>
    using namespace std; 
    
    int main(int argc, char* argv[]) 
    { 
    
    ifstream datei("test.txt"); 
    
    string zeile[200];
    string str;
    size_t found;
    
       for (int i= 0;i<5;i++)
       {
        getline(datei,zeile[i] ); 
    
        if( found = zeile[i].find("te", 0) != string::npos)
        {
    
             cout<<"te= "<<zeile[i]<<" und steht an Position: "<<i+1<<endl;
    
        };
    
    }
    
    system("PAUSE"); 
    }
    


  • Eine frage noch zu string::npos

    Bedeutet das dass npos zu der Klasse string gehört ?


  • Administrator

    http://www.cplusplus.com/reference/string/string/npos/

    Es ist eine statisch konstante Variable vom Klassentemplate std::basic_string .

    Grüssli


Anmelden zum Antworten