string in array



  • Ich habe eine LoadFile2Str Funktion benutzt um eine komplette Textdatei in einen String einzulesen.
    Danach habe ich diese String nach jedem Leerzeichen, jedem Punkt und jedem Zeilenumbruch aufteilen lassen.

    Aus:
    Dies ist die 1. Zeile der Datei In.txt

    wird:
    Wort 1 : Dies
    Wort 2 : ist
    Wort 3 : die
    Wort 4 : 1
    Wort 5 : Zeile
    Wort 6 : der
    Wort 7 : Datei
    Wort 8 : In
    Wort 9 : txt

    Das ganze schaut so aus:

    #include <cstdlib>
    #include <iostream.h>
    #include <stdio.h>
    #include <string.h>
    #include <windows.h>
    
    using namespace std;
    
    char trenner[]=" .\n";
    
    .
    . 	//hier steht die Funktion LoadFile2Str
    .
    
    int main( void )	//Dies ist die Funktion, die den String Buffer aufteilt
    {
      char *einzelwort;
      int i=0;
    
      LPSTR Buffer; 
      Buffer = LoadFile2Str("In.txt");  // lädt die Datei In.txt 
      cout<<Buffer<<endl<<endl; 
    
      einzelwort = strtok( Buffer , trenner );
      while( einzelwort != NULL )
      {
         printf( "Wort %d : %s\n" , ++i , einzelwort );
         einzelwort = strtok( NULL , trenner );
      }
    return(0);
    }
    

    Hier mein Problem:
    Nun möchte ich ein Array anlegen welches die einzelnen Teile enthält.
    Bsp: mein_array[0] soll "Dies" enthalten
    mein_array[1] soll "ist" enthalten
    usw.

    Sieht also nicht sehr kompliziert aus, aber ich bin ein shclechter Programmierer!

    Kann mir bitte jemand hinschreiben was ich wo deklarieren muss und wie die Definition von mein_array aussieht?

    Vorab gleich mal Danke!



  • #include <vector>
    #include <string>
    
    ...
    std::vector<std::string> stringlist;
    stringlist.push_back("erster eintrag");
    stringlist.push_back("2. Eintrag");
    

    Zugriff über [] und size().

    Devil



  • Zugriff über [] und size().

    verstehe ich leider nicht ganz.

    Bsp: cout << "Erstes Element " << stringlist[0] << ""<< endl; soll "Dies" ausgeben.



  • ...und stringlist.size() sagt dir wieviele elemente der vector hat.

    Devil



  • okay verstanden.

    aber was soll

    stringlist.push_back("erster eintrag"); 
    stringlist.push_back("2. Eintrag");
    

    bedeuten?

    mein ziel ist es, automatisch das erste "einzelwort" in stringlist[0] zu haben, das zweite "einzelwort" in stringliste[1] usw.

    sorry, ich tu mir schwer.



  • Genau das macht push_back(). Es hängt hinten an. Das heißt bei Index 0 hast du "Dies" und bei Index 1 dann "ist".

    http://www.cppreference.com/cppvector/ <- einfach mal durchlesen. 🙂



  • #include <vector>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main() {
    
        string text("Dies ist die 1. Zeile der Datei In.txt");
        const string delims(" .,;\n\t");
    
        vector<string> teile;
    
        string::size_type begIdx, endIdx;
    
        begIdx = text.find_first_not_of(delims);
    
        while(begIdx != string::npos) {
    
            endIdx = text.find_first_of(delims, begIdx);
    
            if(endIdx == string::npos) {
                endIdx = text.length();
            }
    
            teile.push_back(text.substr(begIdx, endIdx - begIdx));
    
            begIdx = text.find_first_not_of(delims, endIdx);
        }
    
        for(unsigned int i=0; i<teile.size(); ++i) {
            cout << i+1 << " : " << teile[i] << endl;
        }
    
        cin.get();
    
        return 0;
    }
    

    Wofür gibt es denn std::string? 🙄



  • vielen danke für die antworten, auch wenn ich z.T. wohl schwer von begriff bin 🤡
    ich habe es entzwischen hingebracht.


Log in to reply