Reverse Print
-
hallo und einen schönen abend,
Ich wollte euch fragen wie ich ein C-Programm schreiben kann, welches die strings verkehrt ausgibt, d.h. hallo=ollah.
ich weiss das ich einen array of char dafür brauche.
2. es soll so modifziert werden, das palindrome erkannt werden, z.B.
=anna und otto= und als meldung "palindrom" erscheint.kann mir jmd da helfen?
-
vielleicht hilft das als anregung
void reverse(char* str){ char* links=str; char* rechts=str+stelen(str)-1; while(links<rechts){ char tmp=*links; *links=*rechts; *rechts=tmp; } } bool isPalindrome(char* str){ char* links=str; char* rechts=str+stelen(str)-1; while(links<rechts) if(*links!=*rechts) return false; return true; }
-
Ist das der gesamte code?wenn nein was muss ich dazu proggen?
Wie funktioniert der code?(muss ja wissen wies geht :-))
-
was siehst du denn im code und was bedeutet es?
-
1. eine funktion die einen char wert zurück gibt....
char* links=str; char* rechts=str+stelen(str)-1;
mit diesen beiden zeilen kann ich leider nichts anfangen.
while(links<rechts){ char tmp=*links; *links=*rechts; *rechts=tmp; }
ist eine schleife in der die sortierung vorgenommen wird...
ansonten weiss ich nicht was jeder schritt bedeutet und was jeder befehl macht.könnt ihr mir vielleicht das irgendwie beschreiben?
char tmp=*links;
Z.B was diese zeile macht und die befehel davon?
ich danke euch!
-
void reverse(char* str){ // dreht die Zeichenkette in str um char* links=str; // setze links auf das erste Zeichen in str ( (links = str) == (links = &str[0]) ) char* rechts=str+stelen(str)-1; // setze rechts auf das letzte Zeichen in str ( str + anzDerZeichen - 1 ) // -1 zählt uns die anschließende '\0' weg, die brauchen wir nicht "umdrehen" while(links<rechts){ // dann solange links und rechts sich nur noch um 1 unterscheiden char tmp=*links; // Zeichen an Speicherposition links sichern, *links=*rechts; // rechts nach links *rechts=tmp; // den zuvor gesicherten Wert nach rechts ++links; // hat Volkard vergessen: (nunja, wie ich Volkard kenn hat er's bestimmt nicht "vergessen" ;) --rechts; // links und rechts "sich näherkommen lassen" } // und schon ist str umgedreht; } bool isPalindrome(char* str){ char* links=str; // s. O. char* rechts=str+stelen(str)-1; // s. O. while(links<rechts) // s. O. if( *(links++) != *(rechts--) ) // vergleiche linkes und rechtes Zeichen und inkrementiere bzw. dekrementiere danach. return false; // sind links und rechts unterschiedlich ist's kein Pallindrom return true; // kommen wir bis daher, wissen wir, daß jedes linke Zeichen seinem analogen rechten Zeichen entspricht. }
-
ich danke euch...das hat mir sehr geholfen...
was müsste ich nur noch am code machen?? kann ja ned alles sein oder?
die ein und ausgabe oder? oder noch was anderes??
-
konkret würden mich noch interessieren:
was macht/ist
char*
was macht/ist?
tmp
was die variablen machen/sind?
str+stelen
Muss diesen Code auch freunden erklären können daher will ichs genauer wissen. Ansonsten TOP erklärt.
Dann habe ich denke ich das Programm dank euch verstanden und habe DANKE EUCH keine weiteren Fragen mehr.mfg sinalco
-
sinalco schrieb:
konkret würden mich noch interessieren:
was macht/ist
char*
ein Datentyp: Zeiger auf ein char(array) - so werden in C Strings behandelt
was macht/ist?
tmp
ein Variablenname (dient im obigen Code zur Speicherung von Zwischenwerten)
was die variablen machen/sind?
str+stelen
str ist der übergebene Parameter (und zeigt auf die Original-Zeichenkette), strlen() (das "e" dürfte ein Tippfehler sein) ist eine Funktion, die die Länge des Strings ermittelt.
Und str+strlen(str) ergibt einen Zeiger, der "strlen(str)" Zeichen hinter den Stringanfang zeigt - also auf das '\0', das das Stringende markiert.
-
-
ich danke allen...habs
wunderbar von euch