Gå til innhold

Tabeller og løkker ...


Anbefalte innlegg

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... :hmm: ) 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. :roll:

Lenke til kommentar
Videoannonse
Annonse

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 av dayslepr
Lenke til kommentar

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 av teflonpanne
Lenke til kommentar

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 av the_c
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...