std::string Splitten

Discussion in 'Source Code' started by Skyfail, Aug 23, 2014.

  1. Skyfail

    Skyfail Addicted Member Inventar

    Joined:
    Mar 21, 2013
    Messages:
    792
    Likes Received:
    2
    Habe mal eine kleine Funktion geschrieben, mit welcher man einen std::string anhand eines chars splitten kann. Sicher nicht perfekt, aber brauchbar :D

    Code:
    std::vector<std::string> SplitString(std::string str, char SplitChar)
        {
            std::vector<std::string> Result;
    
            std::string omfgstr = "";
    
            for (auto i = 0; i < str.length(); i++)
            {
                if (str[i] == SplitChar)
                {
                    Result.push_back(omfgstr);
                    omfgstr = "";
                }
                else
                {
                    omfgstr += str[i];
                }
            }
    
            Result.push_back(omfgstr);
            return Result;
        }
     
    Last edited: Dec 19, 2017
  2. krusty

    krusty Addicted Member Inventar

    Joined:
    Sep 8, 2012
    Messages:
    175
    Likes Received:
    0
    Also, es gibt ja keine allgemeine Spezifikation einer String Splitfunktion,
    trotzdem sollte die Funktion wenn sie einen String splittet, der den Char nicht beinhaltet einen leeren vektor zurückgeben, oder ?
    Momentan
    Code:
    string a = "hallo";
    vector<string> b = splitstring(a,'1');
    
    beinhaltet b ein Element und zwar "".
     
  3. Skyfail

    Skyfail Addicted Member Inventar

    Joined:
    Mar 21, 2013
    Messages:
    792
    Likes Received:
    2
    Du hast recht, werde das nachher überarbeiten. Danke für den Tipp :)
     
  4. VBTyp

    VBTyp Addicted Member Inventar

    Joined:
    Apr 16, 2013
    Messages:
    431
    Likes Received:
    1
    Wenn der Char nicht im String enthalten ist, soll nicht ein leerer Veltor zurückgegeben werden, sondern ein Vektor mit dem String als einziges Element, was doch eigentlich mit dem Source gegeben ist?
    Und bei der Schleife ist es doch sinnvoller, nur auf <str.length zu testen?
    Außerdem könnte eine For each schleife schneller sein, aber ka.
     
  5. Skyfail

    Skyfail Addicted Member Inventar

    Joined:
    Mar 21, 2013
    Messages:
    792
    Likes Received:
    2
    for_each gibt es nur in Std und es macht genau das gleiche :p
    < statt <= würde den letzten Buchstaben weglassen
     
  6. Cre3per

    Cre3per Addicted Member Inventar

    Joined:
    Oct 22, 2012
    Messages:
    697
    Likes Received:
    2
    Code:
    ​
    std::string text = "Hello";
    int nLen = text.length();
    //nLen ist jetzt 5
    char bla = text[nLen] //Und jetzt hast du eine out of range exception
    
    Da muss also ein < hin
     
  7. Skyfail

    Skyfail Addicted Member Inventar

    Joined:
    Mar 21, 2013
    Messages:
    792
    Likes Received:
    2
    Ich kriege aber keine out of range exception D:
     
  8. Cre3per

    Cre3per Addicted Member Inventar

    Joined:
    Oct 22, 2012
    Messages:
    697
    Likes Received:
    2
    Weil der SplitChar gefunden wird bevor du am Ende angekommen bist. Mach einfach ein < da hin
     
  9. Skyfail

    Skyfail Addicted Member Inventar

    Joined:
    Mar 21, 2013
    Messages:
    792
    Likes Received:
    2
    Okay, okay
     
  10. VBTyp

    VBTyp Addicted Member Inventar

    Joined:
    Apr 16, 2013
    Messages:
    431
    Likes Received:
    1
    Und wer hatte mal wieder Recht? :p
    Wenn du deine Funktion noch n Tick schneller machen willst:

    Code:
    std::vector<std::string>SplitString(std::string str, char SplitChar)
    {
    std::vector<std::string> Result;
    std::string omfgstr = "";
    for (int i = 0; i < str._Mysize; i++)
    {
    if (str._Myptr()[i] == SplitChar)
    {
    Result.push_back(omfgstr);
    omfgstr.assign("");
    }
    else
    {
    omfgstr += str._Myptr()[i];
    }
    }
    Result.push_back(omfgstr);
    return Result;
    }
    
     
  11. Skyfail

    Skyfail Addicted Member Inventar

    Joined:
    Mar 21, 2013
    Messages:
    792
    Likes Received:
    2
    Was ist daran schneller?
     
  12. VBTyp

    VBTyp Addicted Member Inventar

    Joined:
    Apr 16, 2013
    Messages:
    431
    Likes Received:
    1
    Du sparst dir n paar Jumps und Tablecalls
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.