Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

AnsiString Problem - Drei Chinesem mit dem Kontrabass

Selecta / 11 Antworten / Baumansicht Nickles

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.

bei Antwort benachrichtigen
DaWoo Selecta „AnsiString Problem - Drei Chinesem mit dem Kontrabass“
Optionen

//Dreichinesen.cpp -Sicromoft- [www.EQuark.tk]
#include

bei Antwort benachrichtigen
DaWoo Selecta „AnsiString Problem - Drei Chinesem mit dem Kontrabass“
Optionen

spitzeklammerauf klasse spitzeklammerzu
jaja naürlich must du "iostream" und "string" einbinden lol

bei Antwort benachrichtigen
mr.escape Selecta „AnsiString Problem - Drei Chinesem mit dem Kontrabass“
Optionen

Beim posten von quelltext müssen die spitzen klammern (zumindest die öffnende "<") codiert angegeben werden.
Also statt z.b.
for(i=0;i<10;i++){}
muss das stehen
for(i=0;i&lt;10;i++){}
oder bei
#include <string.h>
eben
#include &lt;string.h>

Es gibt wohl auch tools und editoren, die aus sourcecode html machen können und auch online gibt es sowas (z.b. CodeColorizer -- The online source code syntax highlighter for ASP C C++ Clipper Delphi HTML Java JavaScript Pascal Visual Basic)

mr.escape



"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
Selecta Nachtrag zu: „AnsiString Problem - Drei Chinesem mit dem Kontrabass“
Optionen

War das jetzt ein Fehler das ich euch vorenthalten habe, das ich das ganze mit dem C++ Builder gemacht habe... ? Ist eine Windows Anwendung. Weil ich habe keinen Plan was ihr da geschrieben habt. Ich will doch nur den Text an Stelle A mit dem Text an Stelle A+1 vergleichen und wenn der gleich ist A löschen. Mehr nicht. Die Strings funktionieren doch.

GreeTz Selecta

bei Antwort benachrichtigen
DaWoo Selecta „AnsiString Problem - Drei Chinesem mit dem Kontrabass“
Optionen

ACHTUNG

Damit wär das ein für alle mal geklärt...
http://mitglied.lycos.de/sicromoft/dc.txt

CU
DaWoo

bei Antwort benachrichtigen
mr.escape DaWoo „ACHTUNG Damit wär das ein für alle mal geklärt......“
Optionen

Statt umlaut(bzw. uml) wäre "vokal" angebrachter ;)
und statt

if (uml(StrE[i+1])){
  //wenn position i+1 auch ein umlaut ist
 } //skippen
 else //sonst "a" erfassen


sollte

if (i==0 || !uml(StrE[i-1]))

stehen, da ansonsten am ende der zeichenkette ein zeichen hinter dem ende getestet würde (i+1).

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
DaWoo mr.escape „Statt umlaut bzw. uml wäre vokal angebrachter und statt if uml StrE i 1 //wenn...“
Optionen

Tatsache ^^ Bin wohl ein Pisa Opfer

Oder-Nicht Verknüpfung cool, soweit war ich noch nicht gegangen in C

-hab die txt nochmal updated-

trotzdem wird im Durchgang 0 bei dir StrE[-1] geprüft ABER
ich habs getestet (leerer string position -100 bis +100 lesen) und festgestellt das in diesen fällen immer leerzeichen zurückgegeben werden. kein Datenmüll oder so. (nur mit Schreiben klappts halt nicht hehehe).

Trotzdem ist deine Version Smarter ;)

bei Antwort benachrichtigen
mr.escape DaWoo „Tatsache Bin wohl ein Pisa Opfer Oder-Nicht Verknüpfung cool, soweit war ich...“
Optionen
trotzdem wird im Durchgang 0 bei dir StrE[-1] geprüft
Aber nur wenn der compiler komplett defekt ist. Bei i==0 wird die bedingung nämlich schon erfüllt und damit findet die zweite prüfung nicht statt. Darum ist auch die reihenfolge wichtig.

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
Selecta Nachtrag zu: „AnsiString Problem - Drei Chinesem mit dem Kontrabass“
Optionen

Danke, aber hab's nun so gemacht:

for (int i=1;i if (KonvText[i] == 'a' && KonvText[i+1] == 'a') {
KonvText.Delete(i,1);}

Das habe ich außerhalb der if-Schleife geschieben, d.h. am Ende überprüft er dies.
Das musst ich lediglich mit eiou noch machen. Klappt einwandfei.

Das ist eine Lösung die ich logisch finde.

Trotzdem danke an alle.

bei Antwort benachrichtigen
mr.escape Selecta „Danke, aber hab s nun so gemacht: for int i 1 i if KonvText i a KonvText i 1 a...“
Optionen

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

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
mr.escape Selecta „Danke, aber hab s nun so gemacht: for int i 1 i if KonvText i a KonvText i 1 a...“
Optionen

Noch was zum löschen.
Nachdem ein zeichen gelöscht wurde, rutscht ja der ganze rest nach vorne. Beim nächsten durchgang der "for(i ..."-schleife wird das aber nicht beachtet, also ein zeichen nicht geprüft. Darum muss die anweisung bei doppelten zeichen statt:
{
  KonvText.Delete(i,1);
}

so lauten:
{
  KonvText.Delete(i,1);
  i--;
}


durch das i--; wird das i++ im for befehl kompensiert und an der selben stelle nach dem löschen erneut getestet (ist nichts mehr zum testen da, endet die schleife).

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen