Wie alphabetisch Sortieren von Zeichenfolgen?
Habe ich versucht, diese zu verwenden, c++ - Programms zum Sortieren von 5 Namen alphabetisch:
#include <iostream>
#include <cstring>
#include <conio.h>
using namespace std;
int main()
{
char names[5][100];
int x,y,z;
char exchange[100];
cout << "Enter five names...\n";
for(x=1;x<=5;x++)
{
cout << x << ". ";
cin >> names[x-1];
}
getch();
for(x=0;x<=5-2;x++)
{
for(y=0;y<=5-2;y++)
{
for(z=0;z<=99;z++)
{
if(int(names[y][z])>int(names[y+1][z]))
{
strcpy(exchange,names[y]);
strcpy(names[y],names[y+1]);
strcpy(names[y+1],exchange);
break;
}
}
}
}
for(x=0;x<=5-1;x++)
cout << names[x];
return 0;
}
Wenn ich eingeben, Earl, Don, Chris, Bill und Andy, bzw., bekomme ich diese:
AndyEarlDonChrisBill
Könnte mir bitte jemand sagen, was falsch mit meinem Programm?
- Nachschlagen
strcmp
. - Haben Sie sich überlegt mit
std::string
und seine std::string::compare - Funktion? - Mehr wie look-up -
std::string
- Unverblümt, Ihr Programm trägt keine offensichtliche Beziehung zu einer rationalen string Sortier-Algorithmus.
- Und ich würde gerne wissen, warum du subtrahieren
2
aus5
in der for-Schleife Bedingung... - bitte denken Sie in Bereiche ohne die Obere Grenze - mit einem Bereich [0,5), die die zahlen 0, 1, 3, 4
- Dein code ist lustig (abgesehen davon, dass übermäßig komplexe): es umfasst
conio.h
was nicht standard ist, und es nicht scheinen, um in Ihrem code verwendet, er verwendetcstring
Bibliothek, das ist eine ziemlich einfache Sache. Wenn Sie versuchen zu lernen, C++ (nicht C) wäre es einfacher zu lernen ist C++ string-Bibliothek-Merkmale (<string>
mit den zugehörigenstd::string
Klasse, wie andere erwähnt). Es sei denn, Sie haben einen starken Grund für die Verwendung von arrays, ist es besser, die Verwendung von standard-Containern statt (z.B.std::vector
im<vector>
). Haben Sie schreiben den code selbst, oder haben Sie versucht, die Anpassung etwas im internet gefunden? - Ich angepasst, das von etwas, das ich gefunden im internet und bin noch immer verwendet, um c++. Ich denke, dass ich versehentlich setzen Sie die conio.h header. Die einzige string-header, die ich kannte, war cstring, also danke für den Tipp.
- Oh, ich vergaß, das zu erwähnen, aber ich bin vertraut mit strcmp, strcat und strcpy Funktionen, aber ich bin mir nicht sicher, wie Sie auf diese situation anzuwenden.
strcmp
vergleicht zwei strings und sagt Ihnen, was kommt zuerst in alphabetischer Reihenfolge. Nichts in deinem code tut dies.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie std::set und std::multiset (wenn Sie gestatten wiederholte Elemente) des strings, und es werden die Elemente automatisch sortiert (man könnte auch die Sortierkriterien ändern, wenn du willst).
Eingang:
Ausgabe:
Können Sie die sort-Funktion:
Ihrem code implementiert ein single-pass bubble-sort. Im wesentlichen fehlt der 'wiederholen, bis keine änderungen an der array' Schleife um die Außenseite.
Den code nicht kümmern, wenn die Namen sind schon in Ordnung. Fügen Sie den folgenden
Der if-Anweisung.
Sie zu viel unnötige Schleifen. Versuchen Sie, diese einfache und effiziente ein. Sie müssen nur tauschen, wenn ein string alphabetisch letztere als andere string.