Wörter aus .txt in vector lesen



  • Guten Tag,
    ich versuche gerade Wörter Zeilenweise in einen vector zu lesen. leider habe ich dabei ein Problem bei dem ich nicht weiter komme. Erstmal mein Code:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    using namespace std;
    
    int main()
    
        {
    		int cnt = 0;
    		int wordCounter = 0;
    		string txtFile;
    		vector<string> words;
    		vector<string> lines;
    		ifstream myfile ("example.txt");
    
    		//Wenn sich der File oeffnen laesst bzw existiert dann:
    		if (myfile.is_open())
    		{
    			while ( myfile.good() )
    			{
    				//Linien in Vector lines speichern
    				getline (myfile,txtFile);
    				lines.push_back(txtFile);
    			}
    
    			//Alle Linien auslesen 
    			int i;
    			for(i = 0; i<lines.size(); i++)
    				cout<<lines[i]<<endl;
    			//File schliessen
    			myfile.close();
    
    			//Wörter einseln auslesen und in Vector schreiben
    			for(int j = 0; j < lines.size(); j++)
    			{
    				string tmpLinie = lines[j];
    				for (int i = 0 ; i < tmpLinie.length();i++)
    				{
    					if (tmpLinie[i] == ' ')
    					{
    						string tmp2;
    						tmp2 = tmpLinie.substr(cnt,i-cnt);
    						words[wordCounter].push_back(tmp2);
    						cnt = i+1;
    					}
    					wordCounter = wordCounter + 1;
    				}
    			}
    		}
    		else cout << "Unable to open file"; 
    
    		cin.sync();
    		cin.get();
            return 0;
        }
    

    Mein fehler liegt bei

    words[wordCounter].push_back(tmp2);
    

    Da sagt er mir, das keine Konvertierung von String nach Char möglich ist.
    Aber das ist doch ein String 😕
    Steh hier bisschen auf der Leitung habe mit dem Thema noch nicht so viel gemacht. Könnte mir eventuell jemand helfen? Oder gibt es eine einfachere Möglichkeit?



  • Du willst einzelne Wörter lesen, verstehe ich das richtig?
    Mache doch einfach:

    while (file)
    {
        std::string tmp;
        file >> tmp;
        words.push_back(tmp);
    }
    

    Dann hast du alle Wörter.



  • Danke, das geht... und ich mach daran schon so lange rum 😃



  • IceDragon schrieb:

    Mein fehler liegt bei

    words[wordCounter].push_back(tmp2);
    

    Da sagt er mir, das keine Konvertierung von String nach Char möglich ist.
    Aber das ist doch ein String 😕

    words[wordCounter] ist in der Tat ein std::string& .
    D.h. Du rufst strings Member std::string::push_back(char) auf.
    Allerdings ist Dein Argument kein char , sondern ein std::string , nämlich tmp2 .


  • Mod

    Nathan schrieb:

    Du willst einzelne Wörter lesen, verstehe ich das richtig?
    Mache doch einfach:

    while (file)
    {
        std::string tmp;
        file >> tmp;
        words.push_back(tmp);
    }
    

    Dann hast du alle Wörter.

    Und sogar als Bonus noch eines, das gar nicht da war.



  • SeppJ schrieb:

    Nathan schrieb:

    Du willst einzelne Wörter lesen, verstehe ich das richtig?
    Mache doch einfach:

    while (file)
    {
        std::string tmp;
        file >> tmp;
        words.push_back(tmp);
    }
    

    Dann hast du alle Wörter.

    Und sogar als Bonus noch eines, das gar nicht da war.

    😃

    @Nathan: Du solltest nach einem Lesevorgang auch testen, ob der Lesevorgang erfolgreich war, bevor du den String verarbeitest.



  • Oh, äh, hehe... 😃
    Ähm, ja das sollte man vielleicht tun. 🙄


Anmelden zum Antworten