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 -.-
-
Verwende doch besser aussagekräftige Namen für dein Topic wie z.B. "spezielle Stringfunktion gesucht".
-
In C++ macht man sowas eigentlich nicht mehr mit char*. Da verwendet man fast immer std::string (oder eine andere Stringklasse).
-
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);- 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]);-
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)
-
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 VarianteEin Ä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.