Ich arbeite an einem Programm, das eine "Animal Adoption Agency" nachahmt. Ich lese aus der Datei, die eine Liste von Tiernamen, Rasse, Alter, Preis und Geschlecht enthält. Ich habe zwei Akten, jeweils eine für Katzen und Hunde.Sortierung mehrerer Arrays unterschiedlicher Typen aus einer Lesedatei
Der Benutzer kann die Liste nach den oben aufgeführten Kategorien sortieren. Ich habe derzeit eine for-Schleife, die genau die Kategorie sortiert, die sie wählen; Die anderen Kategorien werden sich jedoch nicht entsprechend ordnen. Ich bin mir nicht sicher, wie ich das anstellen soll. Hier ist eine verkürzte Version meines Codes, der nur den Zugriff auf den Hundeteil und die Sortierung nach Namen erlaubt, anstatt eine Auswahl zu haben, wie sortiert werden soll.
#include <iostream>
#include <fstream>
#include <istream>
#include <cctype>
#include <string>
#include <string.h>
#include <cstring>
#include <iomanip>
#include <vector>
#include <algorithm>
using namespace std;
int animalMenu, animalCount, animAge[50], animPrice[50], entry = 0, total;
string animType, animName[50], animBreed[50], animSex[50], takeHomeWith;
ifstream animalInform;
const int WIDTH = 8, BIG_WIDTH = 12;
void sortingHat(string[]);
void innerSorting(string[], int);
int main() {
animalInform.open("Dog Information.txt");
animType = "dogs";
// SET NUMBER OF ANIMALS IN FILE
animalInform >> animalCount;
cout << "There are " << animalCount << " " << animType << "! \n";
// SETS ALL THE VALUES BY READING FROM FILE
for (int entry = 0; entry < animalCount; entry++) {
animalInform >> animName[entry] >> animBreed[entry] >> animAge[entry] >> animPrice[entry] >> animSex[entry];
cout << setw(BIG_WIDTH) << animName[entry] << setw(BIG_WIDTH) << animBreed[entry] << setw(WIDTH) << animAge[entry] << setw(WIDTH) << animPrice[entry] << setw(WIDTH) << animSex[entry] << endl;
}
// CLOSE FILE
animalInform.close();
// CALL FUNCTION TO SORT (BY NAME ONLY)
sortingHat(animName);
cout << endl;
// DISPLAY NEWLY SORTED LIST
for (int entry = 0; entry < animalCount; entry++) {
cout << setw(BIG_WIDTH) << animName[entry] << setw(BIG_WIDTH) << animBreed[entry] << setw(WIDTH) << animAge[entry] << setw(WIDTH) << animPrice[entry] << setw(WIDTH) << animSex[entry] << endl;
}
system("pause");
}
void sortingHat(string sortingString[])
{ // SORTS DATA AND PUTS IT IN ORDER, ALPHABETICAL --
for (int outer = 0; outer <= animalCount; outer++)
{
for (int entry = 0; entry <= (animalCount - 2); entry++) {
string temporary[50];
if (sortingString[entry] > sortingString[entry + 1])
innerSorting(sortingString, entry);
}
}
}
void innerSorting(string sorter[], int entry)
{
string temporary[50];
temporary[entry] = sorter[entry];
sorter[entry] = sorter[entry + 1];
sorter[entry + 1] = temporary[entry];
}
Also habe ich offensichtlich nichts, was die anderen Einträge folgen würde. Also, wenn ich Namen wählen, sortiert werden, meine Ausgabe (das ist, was in meiner Datei geschrieben wird) wird aus gehen
Brienne Shepard 6 $150 F
Jon Labrador 3 $200 M
Aemon ShihTzu 10 $50 M
zu
Aemon Shepard 6 $150 F
Brienne Labrador 3 $200 M
Jon ShihTzu 10 $50 M
Und ich will es, dies zu tun (wenn die Wahl nach Namen sortieren):
Haben Sie Vektoren in der Klasse verwendet? –
@CaptainGiraffe nein - sie sagte uns, wir könnten Vektoren verwenden, wenn wir das wollten. Würden Sie diese anstelle von Arrays empfehlen? –
Immer. Ein Vektor adoptable_animals; würde für die einfachste Lösung sorgen. Ihre Sortierbedingung würde sich dann abhängig von den Sortierkriterien ändern. –