Umgekehrter Reihenfolge der Zeilen ohne Umkehr Wörter in C
In C,wie wir das akzeptieren einer Eingabe, die mehrere Zeilen und dann hat die Ausgabe der Zeilen in umgekehrter Reihenfolge (ohne änderung der Reihenfolge der Wörter in jeder Zeile).
Zum Beispiel:
Eingang: Line-1 Zeile 2 Linie 3 Linie 4 Ausgang: Line 4 Linie 3 Zeile 2 Linie 1
- Was haben Sie versucht? Könnten Sie sich vorstellen, wie es zu tun, wenn Sie es selbst tun? (Nicht Programmierung)
- mattgemmell.com/2008/12/08/what-have-you-tried
- Die meisten c-Funktionen wie gets(), scanf() akzeptieren ein single-line-Eingang, ich.e bis neue-Zeile-Zeichen. Wie Eingaben zu übernehmen?
- Zeile für Zeile, speichern alle von Ihnen im Gedächtnis?
- Downvoters, werden mehr Art. Die OP scheint neu zu sein, um computer-Programmierung und seine Frage ist nicht "plz mache meine Hausaufgaben"
- Meiner Meinung nach wird ein Anfänger nicht zulassen, die Frage, ohne zu präsentieren, was Sie schon ausprobiert oder zumindest angeben, was das problem ist. E. g. sein Kommentar über "how to accept input" ist einfach fehlt in diesem Beitrag.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die Lösung einfach. Unter der Annahme, dass
lines
ist ein array von Zeilen (ohne abschließenden Zeilenumbruch) Längesize
, sollte man folgende Schleife:I. e., Sie nur die Ausgabe der Zeilen in der umgekehrter Reihenfolge: ausgehend von der letzten und endet mit der ersten.
Über die Frage "Wie Eingangs-und store-Linien": es gibt mehrere Optionen. Die Eingabe kann durchgeführt werden, mit der Verwendung von
getline
(eine POSIX-Funktion) oderfgets
Funktionen (Sie können manuell löschen Sie nachgestellte Zeilenumbrüche, falls erforderlich); nicht verwendengets
- es ist böse. Sie müssen eine Schleife verwenden, um die input-Zeilen. Linien können gespeichert werden, entweder in einem statischen oder in einem dynamisch wachsenden (überrealloc
) array - basierte auf Ihre Aufgabe. Oder Sie führen eine nicht-so-smart-trick: schreiben Sie eine rekursive Funktion, die den stack zum speichern von Linien (pseudocode):Aber wenn Ihr Eingang ist groß genug, treffen Sie die stack overflow Fehler.
Wenn Sie können noch die maximale Länge der Linie, die Sie Lesen können Linien mit standard C
fgets()
Funktion. Wenn Sie auf den letzten POSIX-konformen Betriebssystem oder GNU glibc, die Sie verwenden können, getline(), die die Zuordnung von Speicher für eine Zeile, so können Sie Lesen, die Länge der Linie. Lesen Sie diese Antwort hier bei SO.Für jede Zeile, dann erhalten Sie
char*
Zeiger.Wenn Sie setzen die maximale Anzahl von Linien zu unterstützen, können Sie
char *lines[MY_MAX_LINE_COUNT]
zum speichern der Zeiger, und dann einfach drucken in umgekehrter Reihenfolge aus dem array. Besser ist die Umsetzung einer sehr einfachen verknüpften Liste ermöglicht voranstellen (dies ist wahrscheinlich die am meisten einfache verkettete Liste " - code kann es sein, im Grunde ein Stapel mit nur push, keine Notwendigkeit für pop...), und drucken Sie dann die Linien aus, dass, wenn alle, die gelesen wurden.Für den einfachen Fall, um zu vermeiden, die Gewährung einer verketteten Liste struct für jede Zeile, es könnte sein am besten speichern Sie die
char*
line-Zeiger in einem array, das ist gewachsen mitrealloc()
:.Erste der Variablen, die sich brauchen:
Dann Schleife Eingabe:
- Und Druck-Schleife für die:
Dank @nameless für pseudocode und @hyde für die getline-Funktion(ich wusste es nicht).
Können Sie eine Schleife verwenden, um diese Linien... d.h.
Und auch eine Schleife verwenden, um es zu drucken, wie die obige Antwort.
Und es ist einfach, wenn Sie einen neuen Mann in der Programmierung, bitte mehr Praxis und mehr. 🙂