2017-04-18 3 views
1

Ich lerne zu programmieren und gefunden interessante Aufgabe, aber ich weiß nicht, wo ich anfangen soll es zu lösen. Also habe ich eine Datei mit einigen Titeln und Kommentaren, die unter dem richtigen Titel stehen müssen. So enthält die erste Zeile der Eingabe eine Zahl N, die die Anzahl der Titel bestimmt. Jede Zeile beginnt mit einer eindeutigen Artikel-ID (Ganzzahl), gefolgt vom Titel in Anführungszeichen. Nachdem es keine Titel mehr gibt, werden Kommentare gegeben. Am Anfang gibt es Titel-ID und Kommentar (ein Wort), aber Kommentare können für die gleiche ID wiederholen. so ist hier eine Struktur einer Datei:C++ aus einer Datei lesen und sortieren sortierten Inhalt

<N>     
<ID1> "<Title1>" 
...     
<IDN> "<TitleN>" 
<ID1> <Comment1> 
...     
<IDK> <CommentK> 

nun in der Ausgabedatei jeder Titel zwei Zeilen hat - zuerst für den Titel und zweite für Kommentare. Titel müssen in aufsteigender Reihenfolge sein. Und Kommentare in umgekehrter Reihenfolge (neueste Kommentare am Anfang) Struktur der Ausgabedatei sein sollten:

<Title1> 
<Comment11> ... < CommentK1> 
... 
<TitleN> 
<Comment1N> ... < CommentLN> 

Beispiel:

input: 

3 
1 "This is some title" 
3 "Another title" 
2 "And one more" 
1 COmment 
1 Another 
3 Great 
2 Awesome 
3 Lucky 
2 Stanley 

output 

This is some title 
Another COmment 
And one more 
Stanley Awesome 
Another Title 
Lucky Great 

ich jetzt nicht, wo beginnen .. Soll ich Arrays verwenden, um Speichern Sie die Daten im Speicher und versuchen Sie dann, sie im richtigen Muster zu sortieren oder laden Sie die Textdatei in eine Datenstruktur. In diesem Fall eine verkettete Liste? Vielleicht kann mich jemand in die richtige Richtung führen, um diese Aufgabe zu erfüllen. (Ich bitte nicht, es für mich zu kodieren, führe mich einfach oder gebe einen Algorithmus, es wäre sehr geschätzt). Vielen Dank!

Antwort

1

Ich nehme an, Sie wissen, wie man eine Datei in C++ liest, wenn nicht, schauen Sie sich zum Beispiel tutorial an.

Für den Sortierbereich können Sie STL container verwenden, um die IDs zu speichern. Ich würde eine Karte mit der ID als Schlüssel und der Zeichenfolge als Wert empfehlen.

Der Vorteil der Karte ist, dass sie bereits sortiert ist (aufsteigende Reihenfolge).

Wenn Sie einen anderen Container verwenden, sollten Sie sich die Sortieralgorithmen ansehen, wenn Sie wissen möchten, wie sie funktionieren. Zum Beispiel Blasensortierung, Auswahlsortierung, Schnellsortierung oder Mischsortierung für die Haupttypen.

Wenn Sie jedoch ohne jede Implementierung sortieren möchten, sehen Sie sich this an.

Dies gibt Ihnen keine spezifische Antwort für Ihr Problem, aber es kann Ihnen helfen, zu starten.

[UPDATE] Ich habe nicht richtig gelesen und ich habe nicht gesehen, dass mehrere Zeilen die gleiche ID haben können. Eine Karte wäre nicht unbedingt der am besten geeignete Container.

+2

Vielleicht wäre ['std :: multimap'] (http://en.cppreference.com/w/cpp/container/multimap) von Nutzen. Es erlaubt mehrere Werte pro Schlüssel; Werte mit äquivalenten Schlüsseln werden in Anzeigenreihenfolge gespeichert. –

Verwandte Themen