ersetzen
-
aber ich will ja einen mit 2 austauschen
mfg saroll
-
naja dann must dus selbst schreiben ganz easy
als erstes suchst ob ein solches zeichen vorkommt wenn ja
splittest du den string in 2 teile, fügst die 2 zeichen am ersten string an und dann wieder anhängen
-
da kommen bei mir immer endlosschleifen raus
-
Wie versuchst du es denn? (Code)
-
jetzt muss ich mich wieder für mein gepfusche schämen
while(strlen(Temp3)>0); {strcpy(Temp3,Temp4+i); Temp3[i]='\0'; if(Temp3[0]=='(') {strcpy(Temp2+i,"\("); i++; } if(Temp3[0]==')') {strcpy(Temp2+i,"\)"); i++; } i++; }
mfg saroll
-
Wie wäre es wenn du es ganz primitiv machst:
while(*str) { if(*str=='(') { *buffer++='\\'; *buffer++='('; } else if(*str==')') { *buffer++='\\'; *buffer++=')'; } else { *buffer++=*str; } ++str; } *buffer=0; strcpy(str, buffer);
schön simpel und einfach
btw: deinen code kapier ich nicht
-
Brauchst dich nicht schämen. Jeder fängt mal klein an ;).
An der Programm-Logik des Ersetzens sollten wir allerdings noch etwas arbeiten. Versuch mal zu beschreiben, wie du einen Ersetzenvorgang machen würdest (ohne mal ans Programmieren zu denken). Stell dir einfach mal vor du hast einen Satz und musst darin bestimmte Wörter durch andere Wörter ersetzen. Wie gehst du vor?
Wenn du Schwierigkeiten hast dir das vorzustellen, dann mach es einfach mal auf Papier. Schreib dir einen Satz auf, ein Suchwort und die Ersetzung auf und versuche dann den Ersetzenvorgang Schritt für Schritt nachzuvollziehen. Schreib dabei den neuen nach und nach entstehenden Satz extra wo hin (also nicht am originalen Satz rumdoktorn ;)).
-
... das prog hängt sich auf ...
mfg saroll
-
An der Programm-Logik des Ersetzens
Beim ersten Überfliegen habe ich glatt "An der Programm-Logik des Entsetzens" gelesen
@Saroll: Welches Programm hängt sich auf? Deines? Shades? Das, das du dir aufgeschrieben hast?
Also versuch mal den Algorithmus in Worte zu fassen, dann ist es auch einfach den nach C zu übersetzen. Du hast 8 Schachteln und willst dort bestimmte Buchstaben durch 2 andere setzen. Aber in eine Schachtel passt nur ein Buchstabe, also muss der Rest nach hinten verschoben werden -> du benötigst auch mehr Schachteln. Nur so als Denkansatz noch: Zuerst zählen wieviele Buchstaben es werden, danach soviel Speicher holen, danach erst die Buchstaben ersetzen - am besten so wie Shade, der neu geholte Speicher ist in dem Fall dann buffer.
MfG SideWinder
-
also: wie ich mir das vorstelle
ich nehme den satz und schau mir zeichen für zeichen an
wenn ich das zeichen gefunden habe dann lege ich den satzteil vor dem zeichen ab und geb das dazu was statt dem ersetzten hingehört...
dann lösch ich das zu ersetzende und tu den restlichen teil des satzes wieder dran... oder ich suche halt weiter ob es noch einen zu ersetzenden teil gibt...shades programm hängt sich auf... :(:(
mfg saroll
-
Hängt sich auf = Endlosschleife oder Hängt sich auf = Segmention Fault?
Denk dran, wieviel Speicher sein buffer haben muss. Du kannst nicht einfach damit rechnen, mehr Schachteln zu haben!
MfG SideWinder
-
es hängt sich auf: "senden / nicht senden von windows" meldung kommt...
-
Lass mal deine komplette Implementierung sehen, das was du jetzt mit Shades Code ausführst + Variablendeklarationen. Es fehlt sicher an Speicherplatz
MfG SideWinder
-
variablen:
char *str,*buffer;
der rest:
strcpy(str,Temp2); while(*str) { if(*str=='(') { *buffer++='\\'; *buffer++='('; } else if(*str==')') { *buffer++='\\'; *buffer++=')'; } else { *buffer++=*str; } ++*str; } *buffer=0; strcpy(Temp2, buffer);
mfg saroll
-
Ja und wo zählst du jetzt wieviel platz buffer benötigt und wo hat buffer seinen Speicherplatz?
Der arme Puffer hat keinen Speicherplatz
MfG SideWinder
-
*heul*
ich kenn mich nicht mehr ausund wie geb ich dem blöden buffer speicherplatz??
mit dem malloc zeug??
oder gehts auch einfacher??
-
mach so
/* entweder du nimmst eine fixe groesse wie hier oder du schreibst eine funktion die zählt wie viele zeichen ausgetauscht werden und dann ist halt der buffer um die Anzahl dieser zeichen groesser als der string buffer = (char*) malloc (sizeof(src_string) + count); machs aber am anfang mit fixer groesse */ char buffer[50]; void tausche_aus(src_string, buffer); // Funktionsaufruf
-
Unser Algorithmus sieht grundsätzlich so aus:
Zeichen ansehen if Zeichen == bestimmtesZeichen then Zeichen = neuesZeichenTeil1 verschiebe_buffer_ab_zeichen_nach_hinten(str) Zeichen+1 = neuesZeichenTeil2 // wenn wir nicht verschieben würden, würde hier etwas verloren gehen else Zeichen = altesZeichen Nächstes Zeichen ansehen
Schwierig umzusetzen ist in C das verschieben, da ein Array zu einem Zeitpunkt immer nur eine fixe Größe hat und sich nicht dynamisch vergrößert. Wir könnten alles um eins nach hinten verschieben, bloß wohin mit dem letzten Zeichen?
Also arbeiten wir in C anders, wir legen uns einen TempBuffer an (bei Shade buffer) der die Größe hat die wir benötigen:
// Speichergröße "berechnen" BenoetigterPlatz = 0 Zeichen ansehen if Zeichen == bestimmtesZeichen then BenoetigterPlatz += 2 else BenoetigterPlatz += 1 // BenotiegterPlatz++ Nächstes Zeichen ansehen // Speicherplatz holen (TempBuffer anlegen), C-Code: char* buffer = new char [BenoetigterPlatz + 1]; // + 1 ist deshalb nötig, weil C immer noch ein 0 am Ende eines Strings haben will und das wollen wir auch einfügen // Shades Algorithmus DerzeitigesZeichen = 0 Zeichen ansehen if Zeichen == bestimmtesZeichen then buffer[DerzeitigesZeichen] = neuesZeichenTeil1 buffer[DerzeitigesZeichen] = neuesZeichenTeil2 DerzeitigesZeichen += 2 else buffer[DerzeitigesZeichen] = Zeichen DerzeitigesZeichen += 1 Nächstes Zeichen ansehen // 0 anfügen, damit es ein "echter" C-String wird: buffer[DerzeitigesZeichen] = 0 // Damit der User aber nicht ab jetzt mit buffer arbeiten muss sondern weiterhin mit str arbeiten kann hängen wir den String jetzt um: // Alter String kann gelöscht werden, C-Code delete [] str // Alten String auf neuen String zeigen lassen, C-Code str = buffer
Hoffentlich war das verständlich und fehlerfrei
MfG SideWinder
-
Statt new und delete natürlich malloc und free benützen
*C++ geschädigt bin*
MfG SideWinder
-
ne, du, irgendwie hab ich das nicht verstanden
ich bin und bleib dumm...mfg trauriger saroll