Forum » Programiranje » [C++] Sortiranje strukture
[C++] Sortiranje strukture
minghags ::
Kako bi lahko strukturo sortiral po imenu in priimku?
Koda:
Če mi lahko kdo prosim razloži ali pa me napoti v pravo smer...
Hvala
Koda:
#include <iostream> #include <string> using namespace std; struct student { int st_studenta; string vpisna; string ime; string priimek; }; student vpis(int st_studenta) { student student; string vpisna,ime,priimek; cout<<endl<<"Vnesite vpisno številko študenta: "; cin>>vpisna; cout<<endl<<"Vnesite ime študenta: "; cin>>ime; cout<<"Vnesite priimek študenta: "; cin>>priimek; student.st_studenta=st_studenta+1; student.vpisna=vpisna; student.ime=ime; student.priimek=priimek; return student; } void izpis(student student) { cout<<endl<<"St. študenta: "<<student.st_studenta; cout<<endl<<"Vpisna: "<<student.vpisna<<endl; cout<<endl<<"Ime: "<<student.ime<<endl; cout<<endl<<"Priimek: "<<student.priimek<<endl; } int main() { int st_studentov=0; student seznam_student[50]; int meni; do { cout<<"-------MENU-------------"<<endl; cout<<"________________________"<<endl; cout<<"1. Vnos študenta "<<endl; cout<<"2. Izpis študentov "<<endl; cout<<"3. Sortiranje študentov "<<endl; cout<<"4. Najdi študenta "<<endl; cout<<"0. Izhod "<<endl; cout<<"========================"<<endl; cin>>meni; if(meni==1) { seznam_student[st_studentov]=vpis(st_studentov); st_studentov++; } if(meni==2) { for(int a=0;a<st_studentov;a++) { izpis(seznam_student[a]); } } }while(meni!=0); return 0; }
Če mi lahko kdo prosim razloži ali pa me napoti v pravo smer...
Hvala
kow ::
To se počne s knjižnico STL. Napolniš vector stringov in kličeš algoritem sort. Da je sort imun na velike začetnice, pa je malo bolj komplicirano.
Searchaj "STL vector string sort alphabetically". Pa dodaj še besedo stackoverflow.
Searchaj "STL vector string sort alphabetically". Pa dodaj še besedo stackoverflow.
win64 ::
ni toliko komplicirano, funkcij sort lahko pošlješ sortirno funkcijo kot parameter.
Funkcijo za primerjat pa ni toliko komplicirano napisat.
Če želiš, da ne upošteva velikosti črk, potem pač oba niza prej spremeniš v male ali velike črke.
http://www.cplusplus.com/reference/algo...
http://www.cplusplus.com/reference/stri...
Funkcijo za primerjat pa ni toliko komplicirano napisat.
int compare(const student & a, const student & b) { return (a.priimek.append(" ").append(a.ime)).compare(b.priimek.append(" ").append(b.ime)); }
Če želiš, da ne upošteva velikosti črk, potem pač oba niza prej spremeniš v male ali velike črke.
http://www.cplusplus.com/reference/algo...
http://www.cplusplus.com/reference/stri...
zos ::
Glede na to, da je tole verjetno za kak 1. letnik faksa, bi sklepal, da moras sortiranje implementirati "rocno" s kaksnim od algoritmov, ki ste jih spoznali.
smoke ::
Če uporabiš STL container
Razen če je point naloge da sam napišeš sortirni algoritem, kot je že zgoraj nekdo omenil. Potrebuješ pa compiler, ki podpira C++11 standard za tole rešitev.
vector<student>recimo z imenom "studenti" potem lahko načeloma sortiraš tudi tako:
std::sort(studenti.begin(), studenti.end(), [&] (stud s1, stud s2) { std::string a = s1.ime + s1.priimek; std::string b = s2.ime + s2.priimek; return lexicographical_compare(a.begin(), a.end(), b.begin(), b.end()); });
Razen če je point naloge da sam napišeš sortirni algoritem, kot je že zgoraj nekdo omenil. Potrebuješ pa compiler, ki podpira C++11 standard za tole rešitev.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C++] Naloga seznamOddelek: Programiranje | 3303 (2578) | Matic1911 |
» | [c#] Napačen izpis -- prazni stringiOddelek: Programiranje | 1535 (1477) | Spura |
» | [Java][Naloga] Seznam študentov, majčken problemOddelek: Programiranje | 2322 (2009) | VASkO |
» | Osnove objektnega programiranjaOddelek: Programiranje | 1041 (928) | Krushi |
» | c++ datotekeOddelek: Programiranje | 4053 (3542) | Vesoljc |