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:
Alles anzeigen
kann mir da bite jemand helfen??
wenigstens die funktionen!
Danke im vorraus
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:
Quellcode
- #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)
- {
- }
- Code:
- #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 vorraus