Strings Buchstaben vertauschen
-
@Wade1234
Ja, ich habe es verstanden.
Das Problem besteht nur darin, dass ich die Grundlagen langsam kann und diese nun erweitern muss. 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.
Aber sowas wieispunct
kenne ich gar nicht, sodass der Tipp von @Th69 mit ctype.h zu arbeiten, sehr hilfreich war und ich letztendlich dadurch die eine Aufgabe lösen konnte ohne das mir direkt die Lösung geschrieben wurde.
-
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> char *strreplace(char *str,const char *from,const char *to) { char *p=str; while( p=strstr(p,from) ) { memmove(p+strlen(to),p+strlen(from),strlen(p+strlen(from))+1); memcpy(p,to,strlen(to)); p+=strlen(to); } return str; } int main() { // 3. Variante char string3[200] = "Hallo, diese Nachricht wird ersetzt. Dieser Quelltext gehoert zu den Systemen."; printf("Vorher: %s\n", string3); // Vorher printf("Nachher: "); // Nachher printf(strreplace(string3,"en","x"),strreplace(string3,"x","en"), strreplace(string3,"er","q"), strreplace(string3,"q","er"), strreplace(string3,"y","ch"),strreplace(string3,"ch","y"), strreplace(string3,"a","o"), strreplace(string3,"o","a")); return 0; }
-
@codinglea also wenn du jetzt langeweile hast, kannst du dich ja mit threads und prozessen beschäftigen.
-
@Wade1234
Danke für den Tipp!
Sehr gerne, wenn ich meine weiteren Aufgaben fertig habe!
Wer weiß, vielleicht brauche ich ja auch nochmal Hilfe bei denen...
-
@codinglea Das funktioniert?
was passiert in Zeile 41?
(alleine das printf funktioniert anders)Edit: warum das printf funktioniert ist mir klar, aber einem Anfänger sollte man das nicht empfehlen.
-
@DirkB
Ja, das funktioniert, hab's natürlich ausprobiert, sonst hätte ich nicht gesagt, dass es klappt.
In Zeile 41 werden alle Umwandlungen genommen und in den String eingesetzt.
-
@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.