String teilen



  • Ich teile die Worte eine Strings folgendermaßen auf, wenn diese durch Leerzeichen voneinander getrennt sind:

    copy(istream_iterator<string>(istringstream(str)), istream_iterator<string>(), back_inserter(m_v));
    

    str enthält den String, m_v ist der Vektor, der die Teilstrings aufnimmt.
    Gibt es die Möglichkeit, obigen Code leicht abzuändern, wenn das Trennzeichen nicht ein Leerzeichen, sondern ein Komma, Semikolon o. ä. ist?



  • Ja, füttere unsere C++ Forum Suchfunktion mit String Tokenizer

    MfG



  • Ich suche keinen Algo, sondern wollte nur wissen, ob man durch eine - wie auch immer geartete - leichte Umänderung obigen Codes andere Trennzeichen als Leerzeichen verwenden kann.



  • Hallo,

    ich finde diese Zeile ein bißchen seltsam!?

    copy(istream_iterator<string>(istringstream(str)), istream_iterator<string>(), back_inserter(m_v));
    

    Was genau hast du vor?

    MfG



  • Nim getline



  • you schrieb:

    Hallo,

    ich finde diese Zeile ein bißchen seltsam!?

    copy(istream_iterator<string>(istringstream(str)), istream_iterator<string>(), back_inserter(m_v));
    

    MfG

    Der Stringstream selbst liefertliefert mit dem op>> immer ein Wort (leerzeichen).

    Der istream_iterator erlaubt es mit hilfe des streams nun wortweise zu lesen bis kein Wort vorhanden ist.

    Der Backinserter packt das gelesene wort dann in den Vector und dient dabei als Ziel für copy.

    Am ende wird einfach in einem vector<string> jedes Wort aufgeteilt so das Du aus einem String eine liste an Wörtern bekommst.

    Du könntest:

    Mal die Suchfunktion nutzen und schauen was Du findest,

    dem stream sagen das das trennzeichen anderst ist.
    Aber genau hier weiß ich nicht weiter.

    boost::tokenizer sollte Dir aber einen Code liefern der alles kann und sich leicht in Deinen bisherigen Code einbringen lässt.


Anmelden zum Antworten