Teilstrings in arrays
-
Hey Forumsgemeinde,
brauche mal ein wenig hilfe bei meinem Quelltext
ich will einen von einem benutzer eingegebenen string in seine bestanteile zerlegen. soll heißen:
der string soll Buchstabe für Buchstabe zerlegt werden und dann in ein Array (Letters[50]) geschrieben werden.
im enteffeckt mochte ich dann den einzelnen buchstaben werte zu weisen (z.B.: a=1, b=5, c=4, o.ä.)das ganze soll so ablaufen:
ich ermittle die länge des Strings,
dann läuft eine schleife so oft durch wie der string zeichen hat
und dabei wird von vorn nach hinten jeder buchstabe/zeichen ermittelt.mein eigentliches problem ist jetzt das ich dafür keinen syntax kenne, ich beschäftige mich auch erst seit kurzem mit c++ (builder)
hoffe mir kann jemand weiterhelfen
hier mal mein bisheriger Quellcode:
int Laenge=0; int i=0; String GesName; String Letters[50]; String Name1=Edt_Name1->Text; String Name2=Edt_Name2->Text; String GesName=(Name1+" "+Name2); Laenge= GesName.Length(); for (i;i<=Laenge;i++) { Letters[i]=? }
-
Hallo
Wenn du die einzelnen Zeichen eines Strings lesen willst, dann brauchst du kein extra Array, denn die String-Klasse bietet schon selber einen []-Operator.
int Laenge=0; String GesName = Edt_Name1->Text + " " + Edt_Name2->Text; for (int i = 1;i<=GesName.Length();i++) { char x = GesName[i]; // Zugriff auf das i-te Zeichen }
Bitte beachte, das in der String-Klasse die Indizierung der Zeichen bei 1 beginnt, nicht bei 0 wie bei normalen Arrays.
bis bald
akari
-
Danke für die schnelle antwort
funktioniert soweit super, allerdings ist schon das nächste problem aufgetreten
wenn ich die ganze geschichte ausführe gibt er mir eine Fehlermeldung "Zugriffsverletzung bei Adresse 40006A2F in Modul 'rtl60.bpl'. Lesen von Adresse 20002C00." zum besten
wisst ihr da vielleicht einen raat?
-
Liegt nicht an akaris Codeschnipsel... Was hast Du denn daraus gemacht?
-
hier nochmal mein abgeänderter quellcode:
testweise wollte ich x im panel1 ausgeben
eig müsste dann ja der letzte buchstabe des strings ausgegeben werden{ String Name1=Edt_Name1->Text; String Name2=Edt_Name2->Text; String GesName=(Name1+" "+Name2); for (int i=0;i<=GesName.Length();i++) { char x =GesName[i]; Panel1->Caption=x; } }
-
akari schrieb:
[...]Bitte beachte, das in der String-Klasse die Indizierung der Zeichen bei 1 beginnt, nicht bei 0 wie bei normalen Arrays.[...]
Übrigens gibst du nacheinander ALLE einzelnen Zeichen auf dem Panel aus... (du siehst jedoch nur das letzte Zeichen, weil es so schnell geht)
MfG
-
hatte mir schon gedacht das es an der for-schleife lag hab jetzt die bedingung
edwas abgeändert und jetzt funzts{ String Name1=Edt_Name1->Text; String Name2=Edt_Name2->Text; String GesName=(Name1+" "+Name2); for (int i=1;i<GesName.Length()+1;i++) { char x =GesName[i]; Panel1->Caption=x; } }
thx@all
-
Noch ein Hinweis:
i < GesName.Length() + 1
und
i <= GesName.Length()
bewirken als Laufbedingung der for-Schleife dasselbe, jedoch ist IMHO die zweite Version übersichtlicher.
Übersichtlichkeit ist das A und O, sobald der Quellcode komplexer wird!
MfG
-
Hallo
Das <= brauchst du gar nicht wegmachen, denn i<GesName.Length()+1 und i<=GesName.Length() ist von der Auswertung her gleichwertig. (Es sei denn GesName ist so extrem lang, das die Addition einen Überlauf produziert...
)
bis bald
akari
-
danke euch nochmals für eure schnelle hilfe und eure hinweise
bis jetzt läuft alles wieder reibungslos
Gruß app