Hilfe bei string sortierung

phpMars

Erfahrenes Mitglied
Hi,

ich habe ein Problem mit einer String Sortierung.
Ich bin Anfänger in c++ und habe mich gerade in Strings eingearbeitet. Nun soll ich folgendes machen:

Ich habe ein 2-Dimensionales Array Name. In diesem werden Vor- und Nachname gespeichert. (Bis zu 10 Namen)
Da ich nicht wusste wie ich die Zeilen einer Tabelle sortieren soll dachte ich mir, speichere ich die Werte einer Zeile in einem 1-Dimensionalen Array, damit der Nachname nicht vom Vornamen getrennt wird.

Hier ist mein Code:

Code:
//-----------Namenstring.CPP-------------------
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <time.h>
#include <stdio.h>
#include <string>
//---------------------------------------------

int main()
{
   string Name[10][2];
   string VoruName[10];
   string Ende = "Nein";
   int i;


   do
   {
   	cout << "Bitte geben Sie Ihren Namen ein (Nachname/Vorname) : ";
      cin >> Name[i][0] >> Name[i][1];

      cout << endl << " Wollen Sie noch mehr Namen eingeben? (Ja/Nein) : ";
      cin >> Ende;

      i++;
   }
   while (Ende == "Ja" || Ende == "ja" && i<=10);

   for(i=0; i<=9; i++)
   {
    VoruName[i] = Name[i][0]+ ", " + Name[i][1];

    if(VoruName[i] != ", ")
    cout << endl << i+1 << ". Name: "<< VoruName[i];
    else
    cout << "\nKeine Eingabe";
   }

   /* Alte Schleife über 2 Dimensionen
   for(i=0; i<=9; i++)
   {
   cout << endl << i+1 << ". Name: "<< Name[i][0] << " " << Name[i][1];
   } */

getch();
return 0;
}

Kann mir jemand Helfen ?
 
Hi.

Äh, kannst du nochmal genau sagen was jetzt dein Problem ist? Du hast zwar gesagt was du gemacht hast, aber nicht was du machen sollst/willst.

Was willst du jetzt wie sortieren? (Nach Vorname, Nachname, aufsteigend, absteigend oder wie?)

Am besten schreibst du dir erstmal eine Funktion die 2 deiner zu sortierenden Objekte vergleicht und einen Wahrheitswert zurückgibt der angibt ob diese 2 Objekte richtig sortiert sind.

Zum Sortieren selbst könnte man dann die Funktion std::sort der Standardbibliothek im Header <algorithm> nehmen.
 
Und welches Array willst du jetzt sortieren, Name oder VoruName?

VoruName ist einfach:
Code:
#include <algorithm>
...

  sort (VoruName, VoruName + 10);
 
habe das jetzt so gemacht:

Code:
   for(i=0; i<=9; i++)
   {
    VoruName[i] = Name[i][0]+ ", " + Name[i][1];
	sort(VoruName, VoruName + 10);
	if(VoruName[i] != ", ")
   	cout << endl << i+1 << ". Name: "<< VoruName[i];
	else
    cout << "\nKeine Eingabe";
   }

aber läuft nicht, wo muss das sort hin ?
 
Erstmal wäre es nicht verkehrt wenn du dir merkst, wieviel Namen überhaupt eingegeben worden sind, dann müßtest du nicht mehr alle Elemente durchgehen.

(Da war übrigens noch ein Fehler: i darf nicht gleich 10 sein und das log. UND bindet stärker als das log. ODER. d.h. deine Bedingung "(Ende == "Ja" || Ende == "ja" && i<=10)" wird auch wahr wenn i schon längst größer als 10 ist und Ende == "Ja" ist.

Vielleicht solltest du auch die Variable "Ende" in "Weiter" umbenennen, es ist sonst so verwirrend.)

Code:
const int max = 10;
string Name[max][2];
string VoruName[max];
int i = 0;

do {
  // eingabe...
} while (++i < max && (Ende == "Ja" || Ende == "ja"));

// i ist die Anzahl der Namen im Array.
// deswegen sollte i nicht überschrieben werden.

for (int j = 0; j < i; ++j) {
  VoruName[j] = Name[j][0]+ ", " + Name[j][1];
}

sort (VoruName, VoruName + i);
 
Zurück