string aufteilen



  • ich hab das forum schon durchsucht, aber einfach nicht passendes gefunden.

    ich will eine zeichenkette so aufteilen das jedes durch ein leerzeichen getrennte wort in eine eigene variable gespeichert wird.

    danke.



  • Du suchst wahrscheinlich nach einem Tokenizer. In c++ kann man das zum Beipiel so machen ( wenn man nur reindes c++ mit der STL benutzen möchte ):
    http://www.codeproject.com/KB/recipes/stringtok.aspx

    Gruß Kimmi



  • Huh... also ich würde einfach durchiterieren^^

    #include <iostream> 
    #include <string> 
    #include <algorithm>
    #include <boost/bind.hpp>
    
    void SpaceOrNot(const char buffer, std::string &savebuffer)
    {
    	if(buffer != ' ')
    		savebuffer.push_back(buffer);
    }
    
    int main() 
    {
    	const std::string buffer("h a l l o");
    	std::string savebuffer;
    
    	std::for_each(buffer.begin(),
    				  buffer.end(),
    				  boost::bind(SpaceOrNot, _1, boost::ref(savebuffer)));
    
    	savebuffer;
    }
    

    😃
    (boost::bind ist äquivalent zur STL-Variante)



  • Mir ist noch ne Boost-Möglichkeit eingefallen:

    #include <iostream> 
    #include <boost/algorithm/string.hpp> 
    
    int main() 
    {
    	std::string buffer("h a l l o");
    	std::cout << boost::algorithm::replace_all_copy(buffer, " ", "") << std::endl; 
    }
    

    😃



  • Noch ne C++-Möglichkeit:

    #include <iostream> 
    #include <algorithm>
    #include <string>
    
    int main() 
    {
    	std::string buffer("h a l l o");
        buffer.erase(std::remove(buffer.begin(),buffer.end(),' '), buffer.end());
    }
    

    😃



  • Für ein Projekt hatte ich mir mal eine Splitfunktion gebaut (mehr oder weniger ähnlichen Code findest du auch hier im Forum), guckst du:

    void split ( vector <string>& v, const string& input, const string& separators )
    { 
    	size_t a = 0, b = input.find_first_of ( separators ); 
    	do
    	{ 
    		if ( b - a > 0 ) 
    			v.push_back ( input.substr ( a, b - a )); 
    		a = input.find_first_not_of ( separators, b ); 
    		b = input.find_first_of ( separators, a ); 
    	} while ( a != string::npos ); 
    }
    

    Mit separators kannst du eins oder mehrere Trennzeichen übergeben, die Zeichenkette input wird anhand der übergebenen Trennzeichen aufgeteilt und die Teile werden im Vector v gespeichert.

    Gruß,
    B.B.


Anmelden zum Antworten