Ich versuche die Reihenfolge der Wörter in einem Satz umzukehren, zB:
Diese Sätze sind umgekehrt.
wird
umgekehrt. sind Wörter Sätze This
Das habe ich bisher, was fast funktioniert: Ich benutze die strrev-Funktion, um die Zeichenfolge umzukehren, und dann die inprev-Funktion, um jedes Wort einzeln an die strrev-Funktion zu senden, um sie in die ursprüngliche Ausrichtung zurückzuversetzen, jedoch in umgekehrter Reihenfolge. Das Senden eines Zeigers für den Anfang und das Ende der strrev-Funktion mag etwas albern erscheinen, aber es ermöglicht die Verwendung derselben Funktion in inprev (), wobei ein Zeiger auf den Anfang und das Ende einzelner Wörter gesendet wird.
%Vor%Hier ist die Ausgabe:
Foobar meine Freunde, Foobar
raboof, sdneirf ym rabooF
foobarfriends, mein Foobar
Das Problem ist, dass das Fehlen eines letzten Platzes am Ende des letzten Wortes bedeutet, dass ein Leerzeichen zwischen diesem Wort und dem vorhergehenden in der letzten Zeichenfolge fehlt und stattdessen auf das Ende des letzten Wortes geworfen wird. Das war das erste Wort in der ursprünglichen Zeichenfolge. Das Senden des Speicherplatzes auf der anderen Seite des Wortes verschiebt das Problem nur anderswo. Kann jemand eine Lösung sehen?
Sie müssen nur den Zeiger start
in der Funktion inprev
verschieben, um den Abstand zwischen den Wörtern zu überspringen. Da es sich um Hausaufgaben handelt (korrigiere mich, wenn ich falsch liege), sage ich einfach, dass du nur den Standort eines Bedieners verschieben musst.
Dies führt jedoch zu einem Problem, nämlich dass inprev
einen Pufferüberlauf ausführt, weil die Suche nicht ordnungsgemäß beendet wird. Ein besserer Weg, es zu tun ist:
und das wird sich auch um mehrere Räume kümmern. Außerdem ist U + 0020 (ASCII 32, ein Leerzeichen) nicht das einzige Leerzeichen. Es gibt Standardbibliotheksfunktionen, die Zeichen testen. Sie sind in & lt; ctype.h & gt; und beginne mit is...
, z.B. isspace
.
Manchmal wird es einfacher, wenn Sie keine Zeiger, sondern Offsets verwenden. Die Bibliotheksfunktionen strspn () und strcspn () zwingen Sie mehr oder weniger dazu, Offsets zu verwenden, und mit der End-of-String-Bedingung ziemlich gut umgehen.
%Vor%Der folgende Algorithmus ist in-place und läuft in 2 Schritten. Zuerst kehrt er die gesamte Saite um. Dann kehrt es jedes Wort um.
%Vor%