Iterator im Index



  • Hi,
    ich parse grade einen String indem ich eine for-schleife
    benutze, die den string bis zu einem bestimmten Zeichen (;,= und 🙂
    ausliest, den bis dahin gelesenen Wert in einem string speichert und sich dann den nächsten datensatz vornimmt.

    Meine Datei soll so aussehen:
    typ:name=wert;

    um die Zeichen einzeln zu durchlaufen möchte ich einen Iterator benutzen.
    Das problem ist aber dass ich in der for-schleife auf den Index des Strings ([x])
    zugreifen muss.
    Ich muss also eine Möglichkeit finden den Iterator in einen Integer umzuwandeln, da std::string keine Iteratoren im Index akzeptiert.
    Ich weiss aber nicht wie ich das machen soll, schon weil ich gar nicht weiss
    wie genau die iteratoorklasse arbeites.

    Ein einfaches (int) wirds ja wohl nicht bringen oder?



  • index = iterator - str.begin();
    

    Müsste helfen.



  • int index = dein_iterator - dein_string.begin();



  • Danke, aber das bringts auch nicht, bekomm die Fehlermeldung:

    error: cannot convert \_\_gnu\_cxx::\_\_normal\_iterator<char*, std::basic\_string<char, std::char\_traits<char>, std::allocator<char> > >' toint' in assignment|



  • http://www.cplusplus.com/reference/std/iterator/distance/
    ist, was du suchst

    std::string::iterator iter = dein_string.begin();
    //irgendwas mit iter machen
    std::string::size_type index = std::distance(dein_string.begin(), iter);
    
    std::cout << "Iterator befindet sich an der " << index << ". Stelle!" << std::endl;
    

    bb



  • Iterator in einen Integer umzuwandeln

    Integer als Indizes sind Iteratoren. Benutze sie doch einfach.

    Ein einfaches (int) wirds ja wohl nicht bringen oder?

    Doch. Hast du es denn schon ausprobiert, bevor du diese Frage gestellt hast?



  • knivil schrieb:

    Ein einfaches (int) wirds ja wohl nicht bringen oder?

    Doch. Hast du es denn schon ausprobiert, bevor du diese Frage gestellt hast?

    Jetzt ja, da krieg ich den:

    error: `class __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' used where a `int' was expected|



  • Super, ohne Quelltext hilft die Fehlermeldung wenig. Am besten postest du etwas mehr als eine Zeile Code.


Anmelden zum Antworten