Analoge Funktion zu split()

insertcoin

Erfahrenes Mitglied
Hallo Leute ..
ich hab wirklich lange gesucht, aber nichts gefunden.

Kann mir jemand sagen, ob es in C++ eine Fkt. gibt die funktioniert wie die split Funktion in Java .. mit der Bibliothek die ich includen muss, bitte ..

Zur Funktion:

string name="eins;zwei;drei";
string[] nameFeld=name.split(";");

und dann wäre nameFeld[0]=eins .. usw.

Hab mir für meine ANwendung schon was mit substring() geschrieben, nur möchte ich jetzt für mein Programm mehr Parameter über die Zeilen auslesen. Und da wäre das umschreiben wirklich eine riesen Arbeit ..

Schonmal danke..
 
hab mir die funktion jetzt doch selbst geschrieben, die ist nicht lang .. ich hab keine ahnung warum ich mich so dumm angestellt hab .. manchmal steht man eben doch auf dem schlauh .. =)
trotzdem danke leute ..

ach ja .. hier die funktion, hab das jetzt über nen vector gemacht .. den kann ich besser weiterverarbeiten ..


vector<string> split(string text, char delemiter){

vector<string> vectorBuffer;
int counter=0;
vectorBuffer.push_back(string());

for (unsigned int run=0; run<text.length(); run++){

if (text.at(run) == delemiter){ //Trennzeichen gefunden

counter++;
vectorBuffer.push_back(string()); //Neuen String anhängen.

}
else{ //kein Trennzeichen

vectorBuffer.at(counter)+=text.at(run); //Zeichen an string hängen
}
}

return vectorBuffer;
}
 
Zuletzt bearbeitet:
Nein. So mach das bitte nicht :D Das ist ziemlicher Performance verlust, weil du nen Kompletten Vector inkl. Strings kopierst!

C++:
void split(std::string const& string, const char delemiter, std::vector<std::string>& destination)
{
    std::string::size_t  last_position(0);
    std::string::size_t position(0);
         
    for (std::string::const_iterator it(string.begin()); it != string.end(); ++it, ++position)
    {
        if (*it == delemiter)
        {
            destination.push_back(string.substr(last_position, position - last_position - 1));
            last_position = position + 1;
        }
    }
}
... so sollte das doch gehen ;)
 
hast schon recht ..deine version macht auf jeden fall sinn ..
aber die Teilstrings müsst ich doch eh neu anlegen, das einzige was ich mir spare ist doch ein Vektor, oder
 
ok, stimmt .. eine andere möglichkeit wäre noch, am schluss einfach nur die referenz zu returnen .. aber selbst das wäre dann wohl noch ein bisschen mehr verbrauch, da ich dann immer noch 2 vectoren anlegen muss ..
danke für den hinweis .. ich werde das sogleich einbauen ..=)
 
Hi

du kannst keine Referenz auf ein lokales Objekt zurückgeben, denn das Objekt wird ja bei verlassen der Funktion zerstört und die Referenz wäre ungültig und das ist unzulässig

lg
 
ahhh .. stimmt ja, ich sollte wohl lieber nochmal drüber nachdenken bevor ich hier so ein zeug rein schreib .. =)
ich machs jetzt über nen parameter, ganz klar .. danke ..
 
Zurück