Position von Iteratoren (auf einen std::string) ermitteln



  • Hallo,

    Ich habe zwei Iteratoren auf einen String und möchte diesen nun mit "substr" aufteilen. substr nimmt nun leider size_type's als Parameter. Gibt es eine Möglichkeit die Index-Position eines Iterators herauszufinden, damit ich diese in "substr" verwenden kann?
    In der MSDN hab ich leider nix gefunden.



  • kannst du nicht std::copy verwenden??



  • std::string hat nen Konstruktor, der zwei Iteratoren entgegennimmt. Zum Beispiel so:

    #include <algorithm>
    #include <iostream>
    #include <string>
    
    int main() {
      std::string orig = "Hello, World!";
      std::string::iterator i = std::find(orig.begin(), orig.end(), 'W'),
                            j = std::find(           i, orig.end(), '!');
      std::string my_substring(i, j);
    
      std::cout << my_substring << std::endl;
    }
    


  • hmmmmm schrieb:

    kannst du nicht std::copy verwenden??

    Das übernimmt doch auch size_type's und damit hab ich wieder das Problem wie bei substr.

    @0xdeadbeef
    Super, genau das, wonach ich gesucht hab.
    Danke 🙂



  • Hallo

    Gibt es eine Möglichkeit die Index-Position eines Iterators herauszufinden

    size_t index;
    string Text = "Hallo";
    std::string::iterator i = std::find(Text.begin(), Text.end(), 'a');
    index = i - Text.begin();
    

    bis bald
    akari



  • godlikebot schrieb:

    hmmmmm schrieb:

    kannst du nicht std::copy verwenden??

    Das übernimmt doch auch size_type's und damit hab ich wieder das Problem wie bei substr.

    😕 😕

    template <class InputIterator, class OutputIterator>
    OutputIterator copy(InputIterator first, InputIterator last,
                        OutputIterator result);
    

    aber egal



  • und um an den size_type zu gelangen:

    std::string str;
    //hier wird irgendwo irgendeine position im string meinIterator an str zugewiesen
    //...
    std::string::size_type pos=meinIterator-str.begin();
    

Anmelden zum Antworten