Explode
-
Gibt es in C++ eine Funktion, wie in php explode() (dass ein String jedes Mal, wenn ein bestimmter String vorkommt, abgeschnitten wird und am Ende als Array zurückgegeben wird)
edit:
Genaue Beschreibung:
array explode ( string separator, string string [, int limit] )Gibt ein Array aus Strings zurück, die jeweils Teil von string sind. Die Abtrennung erfolgt dabei an der mit separator angegebenen Zeichenkette (ein oder mehrere Zeichen). Ist der Parameter limit angegeben, werden maximal limit Teile zurück gegeben. Das letzte Element enthält dann den kompletten Rest von string.
-
Soweit ich weiß, gibt es das nicht (aber ich weiß nicht viel
)Du könntest das mit AnsiString.pos und AnsiString.delete realisieren.
So in etwa (hab aber grad keinen BCB zur Hand)String DerString="Hallo. Das ist, Naja. Ein String."; TStringList lst=new TStringList; int pos; for(pos=0;pos>-1;) { pos=DerString.pos("."); if(pos!=-1) lst.add(DerString.SubString(0,pos)); DerString.Delete(0,pos); }
-
ich hätte aber lieber einen array dx
-
Dann machs eben in ein Arry, wo ist der Unterschied

-
'pos' is not a member of 'System::AnsiString'
-
Ich würde mal in der Hilfe nachschauen...
Daraus ergibt sich, dass pos groß geschrieben werden muss...
-.-
-
Hallo
Ein Blick in die BCB-Hilfe zu den Methoden der Klasse AnsiString und du weißt die korrekte Schreibweise der Methode.
/Edit : Ich bin heut zu langsam
bis bald
akari
-
"Im Projekt explode.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meödung:'Zugriffsverletzung bei Adresse 004207E5.
Lesen von Adresse FFFFFFF6.' Prozeß wurde angehalten. Fortfahren mit Einzelschritt oder Start."
kommt dann als Fehlermeldunghier mien Code:
for(pos=0;pos>-1;) { pos=sstring.Pos("."); if(pos!=-1) sestring[apos] = (sstring.SubString(0,pos)); sstring.Delete(0,pos); apos++; } Edit2->Text = sestring[0]; Edit3->Text = sestring[1]; Edit4->Text = sestring[2]
-
Da ist wohl dein Array etwas zu klein geraten (nur eine Vermutung)
-
Hallo
Du hast nicht berücksichtigt, das bei AnsiString (und nur bei AnsiString) die Elemente (also die chars) nicht von 0 bis Length() -1 gezählt werden, sondern von 1 bis Length().
Und das betrifft auch die AnsiString-Methoden.bis bald
akari
-
Und was genau soll ich jetzt machen?^^ (Bin heute n bisschen dumm)
-
Du mußt als Untergrenze für deine Methodenaufrufe den richtigen Wert angeben - "sestring[apos] = (sstring.SubString(1,pos));"
-
"Im Projekt explode.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meödung:'Zugriffsverletzung bei Adresse 004207ED.
Lesen von Adresse FFFFFFF6.' Prozeß wurde angehalten. Fortfahren mit Einzelschritt oder Start."Geht nicht^^
-
Beim Delete() mußt du das vermutlich genauso machen.
(kleiner Tip: Klick mal auf "Einzelschritt" und schau dir genauer an, was das Programm macht)
-
Hab ich^^
for(pos=1;pos>-1;) { pos=sstring.Pos("."); if(pos!=-1) sestring[apos] = (sstring.SubString(1,pos)); sstring.Delete(1,pos); apos++; }Und das mit einzelschritt wieß ich net wie geht
-
Da fehlen noch Klammern beim if
if(pos!=-1) { sestring[apos] = (sstring.SubString(1,pos)); sstring.Delete(1,pos); }Wegen Debugging schau mal hier rein
http://www.junix.ch/bcb/help/debug.html
-
klappt immer noch nicht^^
-
AnsiString fangen immer bei 1 an, d.h.
if(pos > 0)ist hier notwendig
-
und beim for auch
for (pos = 1; pos > 0;)oder bei
for (pos = 1; pos > -1;)belassen?
-
Warum nimmst du da überhaupt eine for-Schleife?
Das hier sollte auch gehen. sestring muß dabei ein Array der Größe >=limit sein.apos = 0; while(((pos = sstring.Pos(".")) > 0) && (apos < limit)) { sestring[apos++] = (sstring.SubString(1,pos)); sstring.Delete(1,pos); }