Einige Fragen



  • Hallo!

    Ich habe da einige Fragen zu C++ betreffend:

    1. Wie kann man denn in C++ sowas wie ein substring()(wie bei JavaScript) erzeugen?

    2. Gibt es diese 3 JavaScript-Funktionen auch in C++-Form: charCodeAt(), fromCharCode(), Unescape()? Wenn nicht, wie realisiert man dann sowas?

    Das war es erstmal. Ich weiß das sind viele Fragen, aber ich hoffe ihr könnt mir helfen.



  • Von was für Strings redest du? Char* oder std::string oder was ganz anderes?



  • Ich meine die char* - Strings.



  • Einen Sub-String wuerde ich so bauen:

    char *SubString (const char *szIn, int  iStart, int iLength)
    {
       char   pReturn = NULL;;
       int    iSize = -1;
    
       iSize = strlen (szIn);
       iSize -= iStart;
       iStart++;
    
       pReturn = (char *) calloc (sizeof (char), iSize);
    
       strcpy (pReturn, &szIn [iStart]);
       pReturn [iLenth] = '/0'
    
       return pReturn;
    }
    

    Noch zu sagen: Es muessten noch ein paar Checks auf NULL-Pointer, Stringlaenge etc. eingefuehrt werden und der Speicher muss natuerlich spaeter wieder freigegeben werden.



  • edit: *moep* Post kann weg, hab oben was falsch gelesen



  • Wir sind doch im C++ Forum und nicht im Java Forum, oder nicht?



  • Kagge mein Firefox meinte grade er muss mir nen Speicherfehler ausgeben -.-

    1. Verwende doch besser aussagekräftige Namen für dein Topic wie z.B. "spezielle Stringfunktion gesucht".

    2. In C++ macht man sowas eigentlich nicht mehr mit char*. Da verwendet man fast immer std::string (oder eine andere Stringklasse).

    3. substr()

    // Für C++
    std::string text = "Hallo Welt!";
    std::cout << text.substr(0, 5);
    
    // Für C
    void substr(const char* string, char* sub, int begin, int len = -1)
    {
        string += begin;
        while(len-- && *string) *(sub++) = *(string++);
        *sub = 0;
    }
    
    char text[] = "Hallo Welt!";
    char hallo[6];
    substr(text, hallo, 0, 5);
    printf("%s", hallo);
    
    1. charCodeAt()
    // Für C++
    std::cout << static_cast<int>(text[pos]);
    // Für C++ mit Bereichsüberprüfung
    std::cout << static_cast<int>(text.at(pos));
    
    // Für C
    printf("%d", text[pos]);
    
    1. Die komische Funktion die Zahlen zu nem String macht: Langsam sollte der gelernte Leser bemerken dass ein CHAR auch nur eine ZAHL ist und dass man so jedem Zeichen die Zahl zuweisen kann... (Tipp: Verwende das = Zeichen)

    2. Keine Ahnung was die andere Methode macht.



  • MBCS-CITP schrieb:

    Einen Sub-String wuerde ich so bauen:

    char *SubString (const char *szIn, int  iStart, int iLength)
    {
       char   pReturn = NULL;;
       int    iSize = -1;
    
       iSize = strlen (szIn);
       iSize -= iStart;
       iStart++;
    
       pReturn = (char *) calloc (sizeof (char), iSize);
    
       strcpy (pReturn, &szIn [iStart]);
       pReturn [iLenth] = '/0'
    
       return pReturn;
    }
    

    Um Karls Zitat etwas umzuformulieren: wir sind doch im C++ Forum und nicht im C Forum! Absolut grausamer Code für C++ Verhältnisse. Bitte schnell vergessen.

    karl05 schrieb:

    Ich meine die char* - Strings.

    Sofern es keinen wirklich triftigen Grund gibt, verwerfe diesen Gedanken und benutze std::string bzw. std::wstring.

    Einen Sub-String erhält man mit der Methode substr().

    charCodeAt wäre dann einfach Indexierung, zB

    std::string a = "hallo";
    char b = a[2];
    char c = a.at(2); // exception-sichere Variante
    

    Ein Äquivalent zu fromCharCode gibt es afaik nicht, da variable Argumentlisten in C++ nicht unbedingt zum guten Stil gehören. Hier kann man sich aber mit anderen Mitteln behelfen, zB zeichenweiser Konkatenation.

    std::string a = 'h';
    a += 'a';
    a += 'l';
    a += 'l';
    a += 'o';
    // oder
    std::string b = std::string('h') + 'a' + 'l' + 'l' + 'o';
    

    Unescape gibt es zwar nicht, sowas kann man sich aber relativ schnell selbst basteln. Sind maximal 5 Zeilen Code.


Anmelden zum Antworten