Altes Prob zwar gelöst doch... Wie drehe ich Srings auf dem selben Speicherplatz
-
Hallo,
hab da wieder so ein kleines Prob. Da ich das erste selbst lösen konnte würd ich hier evtl. hier bisschen hilfe brauchen.Will einen String nämlich auf dem selben Speicherplatz drehen. Dazu darf ich wieder keine Stringfunktionen benutzen. Mein anfang sieht wie folgt aus, jedoch krieg ich dauenrd den fehler
invalid use of void expression
wenn ich die funktion
printf("\nDas Spiegelwort von Wort 2 ist -> %s", umkehr(wort2));
einfüge.
void umkehr(char wort[]) { <<<< SOLL SO SEIN DARF ICH NICHT ÄNDERN int x=0, i=0, tmp=0; x = wortLaenge(wort); for(i=0; i<=x; i++) { tmp = wort[i]; wort[i] = wort[x]; wort[x] = tmp; x--; } wort[i] =0; }
Konnte leider den Code in der Funktion nicht tetsten, ist erstmal ein "hirngespinst", da es schon beim aufruf fehler gibt.
ps: Normale ausgabe von Wort2 klapp ja ohne Probs.
Gruss Raphael6N
-
Dei funktion umkehr muss void sein?
Dann musst du es so aufrufen:umkehr(wort2); printf("\nDas Spiegelwort von Wort 2 ist -> %s", wort2);
Ich würde die umkehr Funktion auch noch etwas ändern.
void umkehr(char wort[]) { int x=0, i=0, tmp=0; x = wortLaenge(wort) - 1; // Die - 1 ist wichtig for(i=0; i<x; i++, x--) { // < ist besser als <=, weil es keinen Sinn macht einen Buchstaben mit sich selbst zu vertauschen tmp = wort[i]; wort[i] = wort[x]; wort[x] = tmp; } wort[i] =0; }
-
Es hat zwar funktioniert Danke, leider gibt er nur das halbe Wort aus, und wenn das Wort gerade ist dann verschluckt er ein Buschtaben??
Kann es sein das ich da noch eine Tmp variable brauche?
ps: die Funkton muss void sein da sie so vorgegeben ist. hätte mir auch vielles anders gewünscht siehe, post zuvor.
-
Problem gelöst
die Term 0 wurde falsch gesetzt, so ist es Richtig:
wort[wortLaenge(wort)] = 0;
Gruss Raphael6N
-
Hallo,
die Funktion finde ich nicht schön. Du rufst zweimal wortLaenge(wort) auf. Das zweite Mal könntest du dir sparen, wenn du eine weitere temp-Variable hättest. Das macht dann vier Variablen. Es geht aber auch genauso gut mit einer.
-
Raphael6N schrieb:
Problem gelöst
die Term 0 wurde falsch gesetzt, so ist es Richtig:
wort[wortLaenge(wort)] = 0;
Das macht so aber irgendwie keinen Sinn.
Die Funktion wortLaenge zählt die Anzahl von Zeichen bis zum Ende des Strings, also bis zur 0. Das heisst wortLaenge(wort) gibt immer die Position der 0 zurück.
Die Anweisung wort[wortLaenge(wort)] = 0; sucht also die 0 im String und überschreibt sie mit einer 0. Irgendwie ist das Sinnfrei. Wieso sollte ich eine 0 an eine Stelle schreiben wo schon eine 0 steht?
-
zoidberg
*********Das macht so aber irgendwie keinen Sinn
irgendwie schon...wenn er sich die länge des wortes holt und diese zahl als index für ein feld verwendet...dann schreibt er theoretisch die 0 an die letzte stelle...
bye
tt
-
Deswegen hat er mir nur halbe Wörter ausgebenben. Begnüge mich vorerst mit dieser Lösung, da ich leider keine Zeit mehr für "Details" habe *g*.
Ich bin jedoch für weitere Vorschläge, Vereinfachunge offen.
Gruss Raphael
-
TheTester schrieb:
zoidberg
*********Das macht so aber irgendwie keinen Sinn
irgendwie schon...wenn er sich die länge des wortes holt und diese zahl als index für ein feld verwendet...dann schreibt er theoretisch die 0 an die letzte stelle...
An der letzten Stelle steht aber schon eine 0. Es macht also keinen Sinn die 0 ein zweites mal dahin zu schreiben.