String trennen



  • HI!

    Wenn ich eine char * Zeichenkette habe, angenommen
    char * zk = "Hallo|und|tschuess";

    und ich will jetzt "Hallo", "und" sowie "tschuess"
    in einzelne Variabeln laden, wie kann ich dass machen?

    Unter Windows (mit Borland) hab ich sowas schonmal hinbekommen
    allerdings unter benutzung der vcl/clx.

    (URL: http://www.c-plusplus.net/forum/viewtopic.php?t=65067)

    Jetzt muss ich was unter linux machen und dass sollte halt im
    ANSI/ISO standart sein. 😃

    Danke für eure Hilfe.
    MFG Frey



  • Unter C mit strtok und für C++ würde ich dir boost::tokenizer empfehlen.

    www.boost.org

    mfg JJ



  • Ja, und was spricht gegen strtok? Ich würde auch lieber strings benutzen, das ist viel einfach, weniger fehleranfälliger und auch Standard.



  • OK!
    Hab mich jetzt mal heute Mittag ran gesetztk und gebrütet,
    und habs hinbekommen meine solution sieht folgendermassen aus:

    #include <stdlib.h>
    #include <iostream>
    #include <string>
    
    std::string explode(char trennzeichen, std::string str, int part)
                       {
                         std::string output;
                          if (part == 0) // Wenn der erste Part gesucht wird
                                         // müssen viele komplizuierte schritte nicht gemacht werden
                             {
                                  string::size_type pos1 = str.find_first_of(trennzeichen);
                                  output = str.substr(0,pos1);
                             }
                             else
                             {
                                 /* Als erstes muss die Anzahl der Trennzeichen in dem
                                    zu Teilendem String festgestellt werden, dies geschieht in
                                    einer Schleife, und wenn die Anzahl (int i) mit (int) part (-1)
                                    übereinstimmt wird die Postition ausfindig gemacht.
                                 */
                                 int s_lengh = strlen(str.c_str());
                                 int match_c = 0;
    
                                 for (int i=0;i<s_lengh;i++)
                                     {
    
                                       if (str[i] == trennzeichen)
                                          {
                                           match_c++;
                                            if (match_c == part)
                                               {
                                                 std::string str_2 = str.substr(i+1, 1000);
                                                 string::size_type pos2 = str_2.find_first_of(trennzeichen);
                                                 output = str_2.substr(0,pos2);
                                               }
                                          }
                                     }
                             }
                         return output;
                       }
    


  • Sorry hab vergessen zu schreiben wie mans dann verwendet.

    Das sieht folgendermaßen aus:

    char * str = "Hallo|tschau";
    std::string var_1 = explode('|',str,0); // gibt "Hallo" zurück
    std::string var_2 = explode('|',str,1); // gibt "tschau" zurück
    

Anmelden zum Antworten