[Frage]Tabelle erstellen



  • Guten Tag! War gerade duschen und wollte das schreiben, da ich mich mit HTML etc. auskenne und jeder das Dateiformat öffnen kann...code ich die Ausgabe als .html:D
    So also Ein- und Ausgabe klappt dann...Das einzige was ich benötige ist, dass, wenn ein Text eingegeben wird, dass der nach folgendem Muster gesplittet wird (in Arrays?): Wort1, Wort2, also das die Wörter herausgenommen werden, um sie später in die Tabelle einfügen zu können.



  • Wissenscoder schrieb:

    Das einzige was ich benötige ist, dass, wenn ein Text eingegeben wird, dass der nach folgendem Muster gesplittet wird (in Arrays?): Wort1, Wort2, also das die Wörter herausgenommen werden, um sie später in die Tabelle einfügen zu können.

    nutze std::string, dann ist das Auslesen von Wörtern kein Problem:

    std::string wort1, wort2; // benötigt #include <string>
        cin >> wort1 >> wort2; // liest zwei Wörter von cin
    

    War Deine Eingabe

    Hallo Welt

    dann ist wort1="Hallo" und wort2="Welt".

    Gruß
    Werner



  • guten tag! ja ok danke erst einmal, aber das wird nicht klappen bzw. ist zu aufwenig, da es undefiniert viele wörter sind...es sind sehr viele:D geht das ganze auch mit nem Array, wo ich die Wörter drin speichere? wie sieht das dann aus?

    Habe dann noch eine weitere Frage: Wie kann ich in der Konsole etwas durch Copy&Paste einfügen? Kann man da etwas programmieren für oder gibt es da schon etwas?



  • Dann kannst du die Daten auch in einen vector einlesen:

    string line,part;
    vector<string> values;
    getline(cin,line);
    int index=0,nindex=0;
    while(index!=string::npos)
    {
      nindex=line.find_first_of(" \t",index);
      part=line.substr(index,nindex-index);
      values.push_back(part);
      index=nindex+1;
    }
    


  • Wissenscoder schrieb:

    guten tag! ja ok danke erst einmal, aber das wird nicht klappen bzw. ist zu aufwenig, da es undefiniert viele wörter sind...es sind sehr viele:D geht das ganze auch mit nem Array, wo ich die Wörter drin speichere? wie sieht das dann aus?

    geht auch mit vielen Wörtern, aber falls Du cin nutzt kommst Du dann um ein getline nicht herum, damit das Zeilenende erkannt wird. Das kann etwa so aussehen:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <sstream>
    
    int main()
    {
        using namespace std;
        for( string line; cout << "Viele Woerter: ", getline( cin, line ); )
        {
            istringstream buf( line );
            vector< string > woerter( (istream_iterator< string >( buf )), istream_iterator< string >() );
    
            // .. mache was mit 'woerter'
            cout << "Es wurden " << woerter.size() << " Woerter gelesen" << endl;
        }
        return 0;
    }
    

    Wissenscoder schrieb:

    Habe dann noch eine weitere Frage: Wie kann ich in der Konsole etwas durch Copy&Paste einfügen? Kann man da etwas programmieren für oder gibt es da schon etwas?

    Unter welchen Betriebssystem arbeitest Du?
    Bei Windows:
    Cursor setzen -> rechte Maustaste auf oberen Fensterrand -> Bearbeiten -> Einfügen

    Gruß
    Werner



  • ok vielen dank euch allen...werde mir das mit dem code anschauen...melde mich dann wieder bei fragen!
    @Werner Salomon: Danke habs gefunden;)



  • Werner Salomon schrieb:

    Wissenscoder schrieb:

    guten tag! ja ok danke erst einmal, aber das wird nicht klappen bzw. ist zu aufwenig, da es undefiniert viele wörter sind...es sind sehr viele:D geht das ganze auch mit nem Array, wo ich die Wörter drin speichere? wie sieht das dann aus?

    geht auch mit vielen Wörtern, aber falls Du cin nutzt kommst Du dann um ein getline nicht herum, damit das Zeilenende erkannt wird. Das kann etwa so aussehen:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <sstream>
    
    int main()
    {
        using namespace std;
        for( string line; cout << "Viele Woerter: ", getline( cin, line ); )
        {
            istringstream buf( line );
            vector< string > woerter( (istream_iterator< string >( buf )), istream_iterator< string >() );
    
            // .. mache was mit 'woerter'
            cout << "Es wurden " << woerter.size() << " Woerter gelesen" << endl;
        }
        return 0;
    }
    

    Wissenscoder schrieb:

    Habe dann noch eine weitere Frage: Wie kann ich in der Konsole etwas durch Copy&Paste einfügen? Kann man da etwas programmieren für oder gibt es da schon etwas?

    Unter welchen Betriebssystem arbeitest Du?
    Bei Windows:
    Cursor setzen -> rechte Maustaste auf oberen Fensterrand -> Bearbeiten -> Einfügen

    Gruß
    Werner

    Tut mir leid, aber kann mir einer vllt. noch erklären, was du so ungefähr gemacht wird...kenne noch ned alle befehle:D



  • Hier noch mal eine stark aufgedröselte und kommentierte Version:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <sstream>  // istringstream
    #include <iterator> // istream_iterator
    
    int main()
    {
        using namespace std;
        do
        {
            // --   Schleifen-Kopf
            string line;
            cout << "Viele Woerter: ";
            getline( cin, line );   // Hole die ganze Zeile von der Standardeingabe
            if( cin.fail() )        // Falls es ein Problem gibt (hier normal nie)
                break;              //  .. dann unterbreche die Schleife
    
            // hier wird der string 'line' in einen stringstream gefüllt, um ihn 
            //  später wieder herauszulesen. Im Gegensatz zu cin, kann man jetzt gegen End-Of-Line lesen.
            istringstream buf( line );
    
            // Der istream_iterator liest bei jedem ++ einen Wert von dem Stream ein, der ihm übergeben
            // wurde. Im Standard steht:
            //  istream_iterator<T>& operator++();
            //  Effekt: *in_stream >> value
            //
            // Außerdem nutzt man folgenden Konstruktor von vector:
            //  template< typename Iterator >
            //  vector::vector( Iterator von, Iterator bis );
            // der den vector mit dem Inhalt des Intervalls [von..bis) füllt.
            // das 'bis' - also Ende - wird erreicht, sobald ein Lesefehler auftritt
            // (d.h. Lesen gegen End-Of-File)
            vector< string > woerter( (istream_iterator< string >( buf )), istream_iterator< string >() );
    
            // .. mache was mit 'woerter'
            cout << "Es wurden " << woerter.size() << " Woerter gelesen" << endl;
    
        } while(true); // Endlosschleife
        return 0;
    }
    

    Frag' bitte noch konkret nach, was Du genau nicht verstanden hast.

    Gruß
    Werner



  • guten tag!
    Ok danke...habs noch ned ganz probiert...an dieser stelle hackte er immer:

    vector< string > woerter( (istream_iterator< string >( buf )), istream_iterator< string >() );
    

    und konnte leider nix mit istream_iterator anfangen, dass kannte ich noch nicht;) aber dafür übe ich ja:D



  • guten Tag!
    Ok es war nicht ganz einfach, aber ich habe nun einiges verstanden. vielen dank bisdahin.
    Zwei kleine Fragen habe ich jedoch:
    1.) Wie lasse ich nun z.B. jedes gespeicherte Wort anzeigen?
    2.) Wie mache kann ich es ändern, dass er bei den Wörtern das Komma noch mit zu dem Leerzeichen als Trenner nimmt?



  • Kann mir da keiner helfen?



  • Wissenscoder schrieb:

    Kann mir da keiner helfen?

    doch sicher ...

    Wissenscoder schrieb:

    1.) Wie lasse ich nun z.B. jedes gespeicherte Wort anzeigen?

    z.B. so:

    copy( woerter.begin(), woerter.end(), ostream_iterator< string >( cout, "\n" ) );
    

    wobei man noch zusätzlich die Includes

    #include <iterator>
    #include <algorithm>
    

    benötigt.

    Wissenscoder schrieb:

    2.) Wie mache kann ich es ändern, dass er bei den Wörtern das Komma noch mit zu dem Leerzeichen als Trenner nimmt?

    das ist schon schwieriger; im Nachlauf z.B. so: man schreibe sich eine kleine Funktion für das Beseitigen aller Kommas aus einem String.

    // -- beseitigt alle ',' aus einem Wort
    void remove_comma( std::string& wort )
    {
        for( std::string::size_type i; ( i = wort.find( ',' ) ) != std::string::npos; )
            wort.erase( i, 1 );
    }
    

    und rufe es für alle Wörter im vector 'woerter' auf.

    for_each( woerter.begin(), woerter.end(), &remove_comma );
    

    das hat den Nachteil, dass hinter dem Komma immer ein Leerzeichen stehen muss.

    ein wenig sicherer und eleganter wäre es, dies gleich beim Einlesen über einen sogenannten Manipulator zulösen. Ist aber aufwendiger.

    Gruß
    Werner



  • veln vielen dank:D probiere das morgen mal


Anmelden zum Antworten