seth_not@home: c/c++: Doppelte Strings im Array erkennen

Beitrag lesen

gudn tach!

so, nachdem ich hier schon meinen dummen Kommentar abgeliefert habe, kommt noch etwas Code hinterher ;-)

soweit, so lobenswert, jedoch moechte ich trotzdem noch mal darauf hinweisen, dass dieser algorithmus (zumindest im worst case) langsamer ist als ein schnelles sortieren, gefolgt von einer einfachen schleife. Vinzenz praezisierte das noch etwas.
bei einer monte-carlo-simulation wuerde der unterschied zwar etwas kleiner werden, weil die sortierung _immer_ bis zum schluss durchgefuehrt werden wuerde und weil das array selbst (oder eine kopie davon) manipuliert werden muesste; und vergleiche kosten im gegensatz zu zuweisungen fast gar nix. ob sort dadurch wirklich eingeholt werden koennte, weiss ich allerdings nicht.
der code waere jedenfalls etwas kuerzer als der von Hans

qsort(arr, arr_siz, sizeof(string), strcmp); // qsort aus <cstdlib>  
doppelt = 0;  
for(i=arr_siz; i>0; --i)  
  if(strcmp(arr(i),arr(i-1))==0){  
    doppelt = 1;  
    break;  
  }

oder so aehnlich (ist ungetestet).
eine aehnliche moeglichkeit waere das sort aus der library <algorithm>. dann wird's wohl aber u.u. schon wieder umfangreicherer code.

hmm, je mehr ich darueber nachdenke und schreibe, tendiere ich doch immer mehr zur vermeintlich langsameren methode. man koennte sie auch kuerzer und geringfuegig schneller fassen:

bool is_pairwise_distinct(char** my_Array, int len){  
  for(int i,start=len-1; start>0; --start)  
    for(i=start-1; i>=0; --i)  
      if(strcmp(my_Array[start], my_Array[i])==0)  
        return 0;  
  return 1;  
}
~~~ (wieder ungetestet)  
  
urspruenglich fragte der OP ja nach einer fertigen funktion fuer sowas. gibt's bestimmt auch schon in irgendeiner bibliothek, aber soo viel code bringt das selbstschreiben ja nun nicht mit sich.  
  
prost  
seth