Hi, wir sollen ein Programm schreibem, das alle (a) e i o u in a\'s umwandelt. Etwa "Drei Chinesen" in "Dra Chanasan".
Mein Quelltext macht dies zwar, aber er bei mir kommt (was klar ist):
"Draa Chanasan" raus, also 2x a wegen "e" und "i". Nun habe ich mir überlegt wie ich diese Doppel-Buchstaben umgehe. Meine Idee seht ihr anhand der 2. IF Anweisung:
AnsiString Quelle="aeiou",
Ziel ="aaaaa";
int k;
AnsiString konv;
for (int i=1;i k=1;
int help;
help = i-1;
while(k k=k+1;
}
if(k KonvText.Delete(i,1);
KonvText.Insert(Ziel.SubString(k,1),i);
}
// BIS HIERHIN GEHT ES, ABER HALT MIT DEN DOPPELBUCHSTABEN
if(Ziel.SubString(k,1),help == Ziel.SubString(k,1),i) {
KonvText.Delete(i,1);
}
}
So aber ich merke gerade das das Müll ist, aber ich hab gerade echt keinen Schimmer. Meine Idee war halt, das ich vergleiche ob 2 gleiche Zeichen (dewegen i und help = i-1)) nebeneinader liegen und wenn JA dann das erste löschen. Aber so funktioniert das nicht. Bitte helft mir mir,
ICh bitte euch ausnahmsweise KEINE neuen Sachen einzubauen, denn ich versteh das eh nicht.
Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge
Ich kenne die details zu AnsiString nicht, nehme aber an, dass das erste zeichen den index 0 hat und das letzte Length()-1 (mir fällt auf anhieb kein fall mit einem startindex!=0 ein).
Wenn das stimmt, ist die schleife zwei zeichen zu lang (einmal wegen "<=" statt "<" und überprüft dazu auch noch das letzte zeichen, ob dahinter noch etwas bestimmtes ist -> kann ja nicht, ist ja schließlich das letzte!), lässt dafür aber das erste zeichen aus.
Statt:
for (int i=1;i<=KonvText.Length();i++) {
müsste es damit:
for (int i=0;i<KonvText.Length()-1;i++) {
heißen.
mr.escape