Namen sortieren?
-
hey ich hoffe ihr könnt mir weiterhelfen.
ich muss ein programm schreiben in dem der nutzer dazu aufgefordert wird eine gewünschte anzahl an vornamen + nachnamen einzugeben. diese eingaben sollen dann alphabetisch sortiert + mit korrekter groß-/kleinschreibung tabellarisch ausgegeben werden.ich bin noch eher am anfang und habe versucht das sortieren von zahlen in mein programm zu übernehmen und es mit strings statt int-zahlen-eingaben zu versehen aber vergebens.
google hilft mir nicht wirklich weiter und ich muss bei gegebenen libraries bleiben.
#include <iostream> #include <cmath> #include <string> using namespace std; void main (void) { int n; int i, j, h; string name[10]; // fehlt hier index [123]? cout << "Wieviele Namen moechten Sie eingeben?\n"; cin >> n; cout << "Geben Sie " << n << " Vor- + Nachnamen ein!"; for(i=0;i<n;i++) cin >> name[i]; for(j=i++;j<n;j++) { if (name[i] > name[j]) { h = name[i]; name[i] = name[j]; name[j] = h; } } }
-
Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
hey
erstmal: "
void main()
" ist keine gültige funktionssignatur für die hauptfunktion. die, die du brauchst wäre "int main()
".da ich denke dass das eine (haus)aufgabe ist: hat man dir explizit gesagt, du darfst die anderen teile der standard-bibliothek nicht brauchen? denn du hast atm folgendes problem:
du erstellst ein array auf dem stack. die grösse von einem array auf dem stack muss zur compilezeit bekannt sein. da aber der nutzer bestimmt, wie viele personen er sortieren lassen möchte, ist die anzahl eben nicht zur compilezeit bekannt. hier nimmt man in c++ typischerweise "std::vector
". für dein spezifisches projekt hier kann man auch über den gebrauch eines "std::set
"'s nachdenken.
was ich also gerne wissen würde bevor ich weiter antworten kann:
darfst du "
#include <vector>
" / "#include <set>
" / "#include <algorithm>
" / "#include <cctype>
" schreiben?
hat man dir / euch das mit "
void main()
" vorgegeben?
hat man dir / euch gesagt, dass man alle variablen am anfang der funktion definieren soll?
hat man dir / euch beigebracht, was die stl ist und macht bevor man euch diese aufgabe gestellt hat?
gruss
-
wannabeeee schrieb:
google hilft mir nicht wirklich weiter und ich muss bei gegebenen libraries bleiben.
Standardbibliothek? Strings gibt's da, Container für beliebiege Anzahl an Objekten gibt's da, Sortieren gibt's da. Das was noch übrig bleibt (und vermutlich den Kern der Aufgabe ausmachen soll), ist eine Vergleichsfunktion, die zwar alphabetisch sortiert, aber gleichzeitig Groß- und Kleinschreibung nicht beachtet. Denn die Standardvergleichsfunktion sortiert Großbuchstaben vor Kleinbuchstaben ('Z' < 'a'). Wie solch eine Funktion aussehen könnte, überlass ich dir mal zum tüfteln.
Solltest du das wirklich alles selber programmieren müssen, selbst das Sortieren: Oha! Das ist nicht wenig Arbeit und auch teilweise ziemlich schwer.
P.S.: Hier mal ein Grundgerüst. Es sortiert mit der Standardvergleichsfunktion, die Groß- und Kleinschreibung beachtet:
#include <iostream> #include <vector> #include <algorithm> using namespace std; bool compare_alphabetical(const string& lhs, const string &rhs) { return lhs < rhs; // Hier dein Code. } int main() { vector<string> names; for (string name; getline(cin, name); names.push_back(name)); sort(names.begin(), names.end(), &compare_alphabetical); cout << "Alphabetische Liste:\n"; for(auto const &name : names) cout << name << '\n'; }
-
Wie solch eine Funktion aussehen könnte, überlass ich dir mal zum tüfteln.
Kleiner Tipp: Um den Unterschied zwischen Groß- und Kleinschreibung zu verwischen, nimm
std::tolower
/std::toupper
.
-
Π
SeppJ schrieb:
wannabeeee schrieb:
google hilft mir nicht wirklich weiter und ich muss bei gegebenen libraries bleiben.
Standardbibliothek? Strings gibt's da, Container für beliebiege Anzahl an Objekten gibt's da, Sortieren gibt's da. ...
Solltest du das wirklich alles selber programmieren müssen, selbst das Sortieren: Oha! Das ist nicht wenig Arbeit und auch teilweise ziemlich schwer.
P.S.: Hier mal ein Grundgerüst. Es sortiert mit der Standardvergleichsfunktion, die Groß- und Kleinschreibung beachtet:
#include <iostream> #include <vector> #include <algorithm> using namespace std; ...
Das Gerüst kommt dann wegen <algorithm> auch nicht in Betracht.
Ansonsten wäre es ja einfach:
// std::transform algorithm example #include <iostream> // std::cout #include <algorithm> // std::transform #include <string> // std::string std::string s( "This is a test" ); std::transform( s.begin(), s.end(), s.begin(), std::toupper ); std::cout << "s = \"" << s << "\"\n";
Da <locale> auch nicht vorgesehen ist wird auch das nichts
// std::toupper example (C++) #include <iostream> // std::cout #include <string> // std::string #include <locale> // std::locale, std::toupper std::locale loc; std::string str="Test String.\n"; for (std::string::size_type i=0; i<str.length(); ++i) std::cout << std::toupper(str[i],loc);
Wenn man das alles nicht verwenden kann, muss man die betroffenen Funktionen wohl selbst schreiben.
Es könnte dann wohl auf eine selbst implementierte verkettete Liste hinauslaufen sowie z.B. Quicksort.
Das findet sich aber alles z.B. bei Wikipedia ...