Zeilenumbruch als String



  • Hallo alle zusammen.

    Ich habe ein Problem.

    In einem Vektor stehen Buchstaben und auch einfache Zeilenumbrüche also folgendermaßen z.B.

    Hallo

    du

    da

    Wie kann ich einen String mit einem einfachen Zeilenumbruch vergleichen? Und wie kann ich diese dann aus dem Vektor entfernen, dass dann da nur noch steht:

    Hallo
    du
    da

    Kann mir da wer helfen?

    MfG Andi 🙂



  • char zeilenumbruch = '\n**'**



  • In dem Vektor stehen aber Strings.

    Bzw. der Vektor ist als String definiert.



  • myvec.push_back(string("\n"));

    Where is the problem?



  • Hier mal mein Quellcode:

    #include<iostream>
    #include<algorithm>
    #include<fstream>
    #include<vector>
    #include<string>
    
    using namespace std;
    
    int main()
    {
    
     	ifstream Quelle1;
     	//Nachher data1.txt
    	string Quelldateiname1("test.txt");
    	ifstream Quelle2;
    	string Quelldateiname2("data2.txt");
    	Quelle1.open(Quelldateiname1.c_str(), ios::binary|ios::in);
    	Quelle2.open(Quelldateiname2.c_str(), ios::binary|ios::in);
    	char c;
    	string uebergabe;
    	vector<string> woerter;
    	while(Quelle1.get(c))
    	{
    
            if(c == ' ' || c == '\n'||c == ',' || c == '.') 
     		{
    		 	 woerter.push_back(uebergabe);
    		     uebergabe ="";
       		}
    
    	 	if(c != ' ' && c != '\n' && c!= ',' && c != '.')
    		uebergabe = uebergabe + c;	   	
    
    	}
    	woerter.push_back(uebergabe);
     	for(int zahl = 0; zahl<woerter.size();zahl++)
         {
    
    	    cout << woerter[zahl] << endl;
    	}
    	 cout << woerter.size();
    
     	system("Pause");
     	return 0;
    
    }
    

    Und dazu mein Test.txt:

    Hallo alle zusammen
    
    wie geht es dir.
    

    Meine Frage ist jetzt, wie ich diese Leerzeilen wegbekomme.

    MfG Andi

    Danke schon im Voraus für die Antworten.



  • Also die Leerzeilen im Vektor. 🙂

    Uebergabe ist ein String mit dem ich die einzelnen Chars miteinander verbinde und dann in den Vektor woerter einfüge.

    Jedoch stehen im Vektor nun auch Leerzeilen und die sollten weg. Dann kann ich nämlich die Anzahl der Wörter durch woerter.size() bestimmen.

    MfG Andi



  • @XanderCage:
    Meines Erachtens gehst du hier falsch an die Sache ran. Folgender Code:

    string uebergabe;
        vector<string> woerter;
        while(Quelle1.get(c))
        {
    
            if(c == ' ' || c == '\n'||c == ',' || c == '.')
             {
                  woerter.push_back(uebergabe);
                 uebergabe ="";
               }
    
             if(c != ' ' && c != '\n' && c!= ',' && c != '.')
            uebergabe = uebergabe + c;          
    
        }
    

    prüft immer das aktuelle Zeichen, und falls es ein 'korrektes' Zeichen ist wird es angehängt (an 'uebergabe'), ansonsten wird uebergabe in den vektor 'gepusht' und danach 'gelöscht'.
    So weit so gut, aber was machst du, wenn ganz am Anfang in der Datei Leerzeichen (oder andere Blancs) stehen? Dann wird immer eine leere uebergabe hinten an den vektor angehängt. Und noch was anderes, was machst du, wenn mehrere Leerzeichen aufeinmal hintereinander auftreten?

    Hier vielleicht ein Lösungsanssatz:

    bool isBlanc(const char c)
    {
            static const char blancs[] = { ' ', '\t', '\n' };
            static const unsigned int blanclen = sizeof(blancs) / sizeof(blancs[0]);
    
            for(unsigned int i = 0; i < blanclen; ++i)
                    if(c == blancs[i])
                            return true;
            return false;
    }
    
    // Funktion erwartet einen Parater string, aus welchem 
    // dann die Wörter herausgesucht werden.
    vector<string> saveWords(const string& src)
    {
            vector<string> v;
            for(unsigned int i = 0; i < src.length(); ++i)
            {
                    if(!isBlanc(src[i]))
                    {
                            string tmp("");
                            while(!isBlanc(src[i]))
                            {
                                    tmp += src[i];
                                    ++i;
                            }
                            v.push_back(tmp);
                    }
            }
            return v;
    }
    

    Caipi


Anmelden zum Antworten