Duplikate nicht aufscheinen lassen - C

0664jester

Mitglied
Hallo,

Ich habe eine CSV Datei mit strtok aufgesplittet.

Vorher:
Person A;Person B
Person A;Person C
Person B;Person A


Nachher:
Person A
Person B
Person A
Person C
Person B
Person A


Nun möchte ich die ganze Liste ausgeben lassen. das Problem ist, dass hier mehrmal Person A stehen hab.
Natürlich möchte ich das nur einmal machen. Wie kann ich das machen mit strcmp oder einen struct anlegen?
Sie sollten auch alphabetisch sein. Es soll in einer Funktion verpackt werden.

puffer war vorher

Code:
char *ArraySplitten(char *puffer)
{
  printf("Split array");
  char *token;
  char delimiter1[] = ";";
 // char delimiter2[] = "\n";
  
  token = strtok(puffer, delimiter1);
  
  while(token != NULL)
  {
    printf("%s\n", token);
    token = strtok(NULL, delimiter1);
  }
  return token;
}

token ist nachher


lg
 
Zuletzt bearbeitet:
Hallo,

wenn du die Liste sowieso sortieren willst, dann kannst du das quasi sehr einfach verbinden. Z.B. musst du um die Werte zu vergleichen sowieso mit strcmp arbeiten. Dann kannst du falls die Werte gleich sind einfach für den neuen Wert an dieser Stelle abbrechen.

Dabei hast du quasi zwei Möglichkeiten Liste anlegen, alle hinzufügen und mit sort und unique arbeiten, oder schon beim einsortieren aussortieren. Kommt hier quasi auf Bequemlichkeit und Laufzeitrelevanz an.

Grüße Jennesta
 
ich probier mal die erste Möglichkeit(alle hinzufügen) - denk mal ich kann die liste vllt noch für andere funktionen gebrauchen...


Meinst du mit sort "quicksort" oder qsort?

Ist unique auch schon was vorgefertigtes von der stdlib.h?

lg
 
Zuletzt bearbeitet:
In C kannst du qsort zum sortieren verwenden. Die Verwendung ist relativ simpel. Bei Problemen einfach posten.
 
Zeile 66:
Code:
qsort(token,3,sizeof(*token),(int(*)(const void*,const void*))strcmp);

Einerseits schaffe ich nicht den 3er zuersetzen mit etwas sinnvollen,was die Anzahl der Einträge von token abzählt...
andererseits verstehe ich diesen teil nich (int(*)(const void*,const void*))strcmp) was der überhaupt aussagt.


Das Problem ist, dass ich in eine Endlosschleife komme... ansonsten spuckt das Programm ja was aus...
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück