Namen alphabetisch Sortieren
Ich versuche, die Namen alphabetisch Sortieren
e.g Wenn Benutzer Namen und GPA:
Names GPA
Peter 2.8
Robert 5.6
David 7.8
Die Ausgabe sollte sein : -
Names GPA
David 7.8
Peter 2.8
Robert 5.6
Hier ist mein Programm so weit (UNVOLLSTÄNDIG):-
#include <iostream>
using namespace std;
int main()
{
char name [5][25];
float gpa [5];
int i;
for (i=0 ; i<5 ; i++)
{
cout << "Enter name " << i+1 << " : ";
cin >> name [i];
cout << "Enter GPA : ";
cin >> gpa [i];
cout << endl;
}
cout << "\n********** Your entered data **********\n\n";
cout << "\tName" << "\t\t" << "GPA\n\n";
for (i=0 ; i<5 ; i++)
{
cout << "\t" << name [i] << "\t\t" << gpa [i];
cout << endl;
}
for (i=0 ; i<5 ; i++)
{
for (int j=0 ; j<1 ; j++)
{
cout << (int) name [i][j] << endl;
}
}
cout << "\n\n******* Sorted data (w.r.t name) *******\n\n";
cout << "\tName" << "\t\t" << "GPA\n\n";
for (i=0 ; i<5 ; i++)
{
cout << "\t" << name [i] << "\t\t" << gpa [i];
cout << endl;
}
cout << endl;
return 0;
}
Denken Sie daran, nur die Namen alphabetisch sortiert werden. Ich habe die ASCII-Werte der ersten Buchstaben des eingegebenen Namen in der Mitte for
loop, aber:-
1 - ASCII-code für 's' ist nicht das gleiche wie 'S' (Das ist ein problem für mich)
2 - ich kann nicht scheinen, schaffen eine Logik zum Vergleich der ASCII-Werte der ersten Buchstaben der Namen dann Sortieren Sie Sie entsprechend an. Danach die Verknüpfung der Namen mit den Buchstaben sortiert Liste und das Ergebnis angezeigt wird. Auch die GPA sollte verknüpft werden mit den Namen.
Jede mögliche Hilfe würde geschätzt.
InformationsquelleAutor Silver Falcon | 2013-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie konvertieren die Namen' - Zeichen zu Großbuchstaben mit
std::toupper
Sie sollten dann nur in der Lage sein zu vergleichen, die die strings mit < operator.Edit: wenn Sie nicht möchten, zu verwenden
std::sort
🙂Für toupper: cplusplus.com/reference/locale/toupper
Und vergleichen die Zeichenfolgen können Sie verwenden Sie einfach "string1" < "string2".
Naja, eigentlich bin ich mit 2D-Zeichen-array für die Namen. Also du meinst mit
toupper
kann ich umwandeln eines lower-case-Eingabe Großbuchstaben intern? Und dann sollte ich vergleichen Sie die ASCII-Werte der Buchstaben? Oder kann ich nur vergleichen der ersten Zeichen des namens?Ich meine, Sie können buchstäblich vergleichen Sie Sie, indem Sie
name[0] < name[1]
. Erstellen Sie ein paar temp-Variablen (char n1[5]; char n2[5]
) und kopieren Sie die Zeichen aus Ihrem ursprünglichen arrays 1-by-1 z.B.nm1[j] = name[i][j]
, dannn1 < n2
vergleichen.InformationsquelleAutor splrs
Hier ist eine Antwort, die die Verwendung von std::sort. Ich änderte einige deiner C-ähnlichen Ansatz und bei std::sort eigentlich zwingt mich, es zu tun. Der Vergleich-Funktion(compareStudents) muss Objekte so hatte ich zum erstellen der struct. Vektor verwendet wurde, aus dem gleichen Grund, obwohl es möglich gewesen wäre, um mit arrays, aber das ist in der Regel verpönt.
vector
undsorting
Teil mit den logischen algorithmen mit Schleifen etc? Ich habe nicht studiert, diesen noch, und seine schwer für mich zu verstehen.Schöne Arbeit. Sie schrieb ........Student student = *it; ......meinst du ....const Student & student = *it; ...?
Nein, aber das ist wohl auch richtig 🙂 ich schrieb den code mit minimaler Aufmerksamkeit auf details, weil nur die grundlegende Idee war wichtig. Ich habe nicht den Umgang mit C++ in letzter Zeit.
wenn Sie Fragen, mich zu Grunde zu umschreiben std::sort, dann keine, ich mache das nicht. Ich habe in der Tat noch nie geschrieben, jede Art von ordnungsgemäße Sortieren quicksort-Algorithmus, da (als Beispiel) existiert schon, und es ist nicht notwendig, dass der Programmierer wissen seiner komplizierten details. Ich würde gerne Fragen beantworten, die Sie haben, um zu klären, den aktuellen code du.
InformationsquelleAutor denarced
InformationsquelleAutor siddharth