hallo leute bruche kurz eure hilfe bei einer aufgabe "strrev()"
-
hallo
also mein problemm lautet:
Einige Compiler-Hersteller stellen eine Funktion strrev() (=string reverse) mit der Schnittstelle
char *strrev(char *pstr);
zur Verfügung. Die Funktion soll einen String "umdrehen", z.B. "Paul" in "luaP" umwandeln. In pstr wird die
Startadresse der Zeichenkette übergeben, die "umgedreht" werden soll. Das Ergebnis soll die ursprüngliche
Zeichenkette ersetzen, es wird also kein zusätzlicher Speicher für das Ergebnis benötigt. Die in pstr
gespeicherte Adresse soll unverändert als Funktionswert zurückgeliefert werden, um eine Verkettung zu
ermöglichen.
1. Entwickeln Sie die Funktion strrevind(), die sich genau so verhält wie die beschriebene Funktion strrev(), und
intern mit Indizes arbeitet, um auf die einzelnen Zeichen zuzugreifen.
2. Entwickeln Sie zusätzlich die Funktion strrevptr(), die sich genau so verhält wie strrevind(), aber intern mit
Zeigern arbeitet, die inkrementiert bzw. dekrementiert werden.
3. Entwickeln Sie mit der Funktion main() ein Testprogramm, mit dem vom Benutzer ein String angefordert
wird. Dieser String soll in einem char-Array input der Länge 10 gespeichert werden. Die Eingabe soll
sicherstellen, dass bei der Eingabe eines zu langen Strings maximal 9 Zeichen übernommen werden, damit
die Arraygrenzen nicht überschritten werden. Die Zeichenkette soll mit strrevind() umgedreht und das
Ergebnis ausgegeben werden. Die umgedrehte Zeichenkette soll dann mit strrevptr() nochmals
umgedreht und ausgegeben werden. Beim Aufruf von strrevptr() soll überprüft werden, ob die
Verkettung richtig funktioniert, d.h. die Funktion den korrekten Funktionswert zurückliefert. Bei der Ein/-
Ausgabe soll das in den Beispielen (a) und (b) dargestellte Format exakt eingehalten werden (Eingabe zum
besseren Verständnis kursiv dargestellt):
Beispiel (a) Beispiel (b)
String: Paul String: Karl-August
1 x umgedreht: luaP 1 x umgedreht: uguA-lraK
2 x umgedreht: Paul 2 x umgedreht: Karl-Augu
Das gesamte Programm soll vollständig sein und sich ohne Fehlermeldungen und Warnungen übersetzen
lassen!
Lösungshinweise:
Innerhalb der Funktionen strrevind() bzw. strrevptr() benötigen Sie eine Schleife, die beim ersten
Durchlauf das 1. Zeichen mit dem letzten tauscht, beim 2. Durchlauf das 2. Zeichen mit dem vorletzten usw..
Beachten Sie, dass die Anzahl der Schleifendurchläufe nur (etwa) halb so groß ist wie die Länge der
Zeichenkette. Die Schleifensteuerung soll für gerade und ungerade Stringlängen funktionieren. Für das
Umdrehen von "Paul" nach "luaP" benötigen Sie z.B. 2 Schleifendurchläufe, aber für das Umdrehen von "Eva" in
"avE" nur 1 Schleifendurchlauf.
Für den Tausch von jeweils 2 Zeichen setzen Sie am besten eine Hilfsvariable ein und führen einen
"Dreieckstausch" (s. Skript: Pointer5.c) durch.
Beachten Sie, dass das 1. Zeichen den Index 0 und das letzte Zeichen den Index strlen(pstr) - 1 hat.
Das abschließende '\0'-Byte wird nicht in den Tausch einbezogen. Es wird überhaupt nicht bearbeitet, da es
auch nach dem Umdrehen an der richtigen Stelle steht!vorgegeben ist:
#include <stdio.h> /* weitere includes? */ char *strrevind(char *pstr); char *strrevptr(char *pstr); int main(void) { return 0; } char *strrevind(char *pstr) { } char *strrevptr(char *pstr) { }
kann mir da bite jemand helfen??
wenigstens die funktionen!
Danke im v******!
-
hahaha, DIE FUNKTIONEN sollst du alleine machen.
wenn ich sehe, dass ihm jemand hier was vorkaut, loesch ich das ohne vorwarnung.tipp: bei dem strrev mit indizes brauchst du ne for-schleife und beim strrev mit pointern brauchst du nur pointer.
bei der pointergeschichte musst du pointer inkrementieren und dekrementieren.lies das hier, KOMPLETT: http://www.pronix.de/pronix-4.html
-
warum den das??
warum willst es löschen???? was bist du für einer?
ich brauche hilfe und nicht dein dummes gelaber?!?!!?!?
ich brauch die lösung bis morgen und habe keine zeit das ganze durch zu lessen
-
John Doh schrieb:
ich brauch die lösung bis morgen und habe keine zeit das ganze durch zu lessen
wir machen keine hausaufgaben.
sorry.
bei verstaendnis problemen kannst du gerne einen neuen beitrag aufmachen und wir erklaeren dir gerne alles.
aber so bitte nicht.
-
es muss ja wohl nen grund geben, warum du nur noch bis morgen zeit hast und es nicht kannst...
bescheissen gibts nicht, deswegen werde ich alle fertiggerichte loeschen, die hier gepostet werden.
und damit du mir nicht in den ohren liegst mit "boeser mensch du", hier ein bisschen hilfe:
bei der loesung der aufgabe, was wuerdest du jetzt zu erst machen oder wissen wollen?