the_c Skrevet 29. januar 2006 Del Skrevet 29. januar 2006 Hei. Probelmet er følgende: Har en string-tabell, som inneholder mange forskjellige stringer, også flere som er identiske. Jeg ønsker å lage en metode som tar denne tabellen, samt den aktuelle lengden på tabellen som innparameter, og skriver ut alle de "unike" stringene i den. eks. hvis tabellen inneholder følgende navn: ole, per, hans, ole, ole, kristian, hans, kristian - så skal metoden gi følgende utskrift: ole, per, hans,kristian Har forsøkt meg litt frem, men ikke kommet frem til noen løsning. Ser for meg at man oppetter en ny tabell inne i metoden som er like stor som den tabellen som blir sendt inn. Så setter man først tabellelement[0] i den nye tabellen lik tabellelement[0] i den tabellen som metoden tar som innparameter. Videre ser jeg for meg (... og det er her jeg detter av lasset... ) at man vha for-løkker går igjennom tabellene, og setter inn nye navn i den tabellen som blir opprettet inne i metoden. Håper dere skjønner hva jeg mener her, og at noen kan hjelpe. Lenke til kommentar
dayslepr Skrevet 29. januar 2006 Del Skrevet 29. januar 2006 (endret) først, i Common Lisp (siden C er så kjedelig): (let ((unique-names nil)) (dolist (name '("ole" "per" "hans" "ole" "ole" "kristian" "hans" "kristian")) (unless (find name unique-names :test #'string-equal) (push name unique-names))) unique-names) ("kristian" "hans" "per" "ole") tar C litt siden om ingen andre har tatt det innen da, jeg må ha noe mat nå! edit: forslaget til klette under: (let ((unique-names nil) (names '("ole" "per" "hans" "ole" "ole" "kristian" "hans" "kristian"))) (dolist (name (sort names #'string-lessp)) (if (not (string-equal (first unique-names) name)) (push name unique-names))) unique-names) ("per" "ole" "kristian" "hans") Endret 29. januar 2006 av dayslepr Lenke til kommentar
Klette Skrevet 29. januar 2006 Del Skrevet 29. januar 2006 Du kan jo bare ta en sortering på listen og sjekk om hvert element er likt det forrige... string tmp; std::sort(myList); for(i=0; i != myList.length(); i++){ if(myList != tmp) std::cout << myList; tmp = myList; } noe sånnt... Lenke til kommentar
teflonpanne Skrevet 29. januar 2006 Del Skrevet 29. januar 2006 (endret) std::unique fra linken: Remove duplicates from consecutive groups of equal ints. vector<int> V; V.push_back(1); V.push_back(3); V.push_back(3); V.push_back(3); V.push_back(2); V.push_back(2); V.push_back(1); vector<int>::iterator new_end = unique(V.begin(), V.end()); copy(V.begin(), new_end, ostream_iterator<int>(cout, " ")); // The output it "1 3 2 1". edit; oops, så ikke at de like tallene må være i rekkefølge :X Endret 29. januar 2006 av teflonpanne Lenke til kommentar
Dead_Rabbit Skrevet 29. januar 2006 Del Skrevet 29. januar 2006 Hvis du bare kaller std::sort først burde vel det la seg fikse. Altså, gjør noe slikt som: //... sort(V.begin(), V.end()); //... Lenke til kommentar
the_c Skrevet 29. januar 2006 Forfatter Del Skrevet 29. januar 2006 (endret) Takker for svarene alle sammen. Siden jeg ikke har satt meg inn i vektorer enda,- gikk jeg for Klette sin løsning. Fungerer flotters, men jeg måtte lage meg en egen sorteringsfunksjon først (skjønte ikke hvordan std::sort(myList) - skulle brukes). Anyway,- funker fint. Endret 29. januar 2006 av the_c Lenke til kommentar
Klette Skrevet 29. januar 2006 Del Skrevet 29. januar 2006 sett deg inn i de forskjellige liste-typene .. det er verdt det... Lenke til kommentar
the_c Skrevet 30. januar 2006 Forfatter Del Skrevet 30. januar 2006 sett deg inn i de forskjellige liste-typene .. det er verdt det... 5519467[/snapback] Takker for tipset,- skal gjøre det. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå