Strings Buchstaben vertauschen
-
@codinglea auch beim String "en x er q ch y a o"
-
Noch nicht ausprobiert, aber müsste klappen, wenn's so auch klappt mit dem Text.
-
Aber der
printf
in Zeile 41 gibt nur einen (d.h. den ersten) Text wieder aus.Gib die
strreplace
-Aufrufe einzeln nacheinander aus (stattprintf
solltest du dann auchputs
benutzen, da der Text ja 1:1 ausgeben werden soll - ohne evtl. Formatierung, z.B. wenn"%s"
im Text vorkommen würde) - oder alternativ nur den letzten.Und die Umwandlung ist weiterhin nicht korrekt, denn z.B. das
x
wird nicht alsen
ausgegeben, sondern wieder zurück nachx
gewandelt (und für die anderen Umwandlungen gilt das auch) : Dein Code als Ideone-Code.Die korrekte Ausgabe müßte so lauten:
Vorherl: Hallo, diese Nachricht wird ersetzt. Dieser Quelltext gehoert zu den Systemen. Nachher: Holla, diese Noyriyt wird qsetzt. Diesq Quellteent gehaqt zu dx Schstemx.
-
@Th69 sagte in Strings Buchstaben vertauschen:
Aber der printf in Zeile 41 gibt nur einen (d.h. den ersten) Text wieder aus.
Die Parameter von
printf
werden aber trotzdem ausgewertet.
Da alles inplace auf string3 arbeitet und strreplace den Anfang zurück gibt, werden schon alle Änderungen gemacht und ausgegeben.Aber leider falsch.
-
@Th69
Stimmt, da fehlt doch noch etwas!
puts
funktioniert nur leider nicht...
-
@codinglea wie wäre es mit printf("%s") für den anfang? eva-prinzip!
-
puts(strreplace(string3,"en","x")); puts(strreplace(string3,"x","en")); // ...
-
@Th69
Dann wirft das Programm mir 8 Mal den Text aus mit den jeweiligen Tauschoptionen.
-
Ja, genau - und daran siehst du, daß dies nicht die Aufgabe korrekt löst.
-
@Wade1234
wie baue ich dann die Ausgabe auf?
printf("%s", strreplace(string3, "en","x"), strreplace(string3,"x","en");funktioniert leider nicht..
-
@codinglea wenn du nur einmal %s schreibst, wird auch nur ein string ausgewertet.
printf("%s\n%s\n", strreplace(string3, "en", "x"), strreplace(string3, "x", "en"));
oder schöner (wegen eva-prinzip):
strreplace(string3, "en", "x"); printf("%s\n", string3); strreplace(string3, "x", "en"); printf("%s\n", string3);
-
@Wade1234
Die Varianten geben ja auch mehrere Ausgaben an, dies soll eigentlich vermieden werden, sodass es nur eine Textausgabe gibt.
-
@codinglea also wenn du nur das endergebnis haben willst, musst du entweder erst alle strreplace aufrufen, oder strreplace so umschreiben, dass die ganzen ersetzungen gleichzeitig ausgeführt werden.
-
@Wade1234
Hmm okay, ich gucke mal.
-
Ich habe es mal gerade ausprogrammiert - wer also spoilern will: Ideone-Code
Als Optimierungsaufgabe bleibt noch,
strlen(s+len_from)
innerhalb der Schleife zu eliminieren...
-
@codinglea sagte in Strings Buchstaben vertauschen:
@Wade1234
Die Varianten geben ja auch mehrere Ausgaben an, dies soll eigentlich vermieden werden, sodass es nur eine Textausgabe gibt.Es geht ja dabei erst mal nur darum, zu sehen, wie die Zwischenergebnisse aussehen, die zu dem falschen Endergebnis führen, um eine Idee bekommen zu können, was da falsch läuft!
-
@codinglea sagte in Strings Buchstaben vertauschen:
... Daher suche ich in diesem Forum Tipps. Ich möchte nichts vorgekaut bekommen, ich will gar nicht mal die Lösung. Mir reicht es, wenn jemand hilfsbereit ist und mir auf die Sprünge hilft.
Interessant ... trotzdem hast Du Wutzs Lösung einfach abgeschrieben - obwohl sie Dein spezielles Problem nicht mal löst
-
@Belli
Wenn es klappt und ich es verstehe, warum nicht?
-
@codinglea sagte in Strings Buchstaben vertauschen:
@Belli
Wenn es klappt und ich es verstehe, warum nicht?Dann wäre es ja gut.
Es klappt aber NICHT, und Du hast es nicht mal bemerkt, alle (bzw. viele) hier haben aber bei Wutz Lösung direkt gesehen, dass sie sich eignet, eine Umwandlung durchzuführen, Dein spezielles Problem (X --> EN und gleichzeitig EN --> X ) aber nicht löst.
Offensichtlich hast Du es daher NICHT verstanden, obwohl es entsprechende Hinweise im Thread gibt.
-
anzumerken wäre vielleicht auch noch, dass du memcpy zu übungszwecken selbst programmieren solltest.