c/c++: Doppelte Strings im Array erkennen
Max
- programmiertechnik
0 Hans0 Vinzenz Mai0 seth_not@home0 Fanny0 Hans
Hallo,
ich bräuchte unbedingt schnelle Hilfe. Ich hoffe jemand kann mir helfen, und zwar. Ich bräuchte eine Funktion die mir einen int-Wert liefert(1 oder 0), sowie ein doppelter String in einem Array gefunden wurde. in C muss man ja immer wieder und wieder das Rat neu erfinden. Fals jemand so eine Funktion hat, wäre ich ihm sehr dankbar, wenn er/sie mir geben könnte. Bitte hilft mir, es besteht äußerste Dringlichkeit.
Grüße
Hallo,
ich bräuchte unbedingt schnelle Hilfe. Ich hoffe jemand kann mir helfen, und zwar. Ich bräuchte eine Funktion die mir einen int-Wert liefert(1 oder 0), sowie ein doppelter String in einem Array gefunden wurde. in C muss man ja immer wieder und wieder das Rat neu erfinden. Fals jemand so eine Funktion hat, wäre ich ihm sehr dankbar, wenn er/sie mir geben könnte. Bitte hilft mir, es besteht äußerste Dringlichkeit.
Grüße
ich bräuchte unbedingt schnelle Hilfe. Ich hoffe KOMMA jemand kann mir helfen PUNKT
Und zwar DOPPELPUNKT
Ich bräuchte eine Funktion KOMMA die mir einen int-Wert liefert(1 oder 0), SOBALD ein doppelter String in einem Array gefunden WIRD. IN C muss man ja immer wieder und wieder das RAD neu erfinden. FALLS jemand so eine Funktion hat, wäre ich ihm sehr dankbar, wenn er/sie mir geben könnte. Bitte HELFT mir, es besteht äußerste Dringlichkeit.
So, ich hoffe, für den Anfang ist Dir damit mal geholfen. Ob jemand so eine C-Funktion hat, weiß ich nicht.
Gruß
Hans
Hallo,
ich bräuchte unbedingt schnelle Hilfe. Ich hoffe KOMMA jemand kann mir helfen PUNKT
Und zwar DOPPELPUNKT
Ich bräuchte eine Funktion KOMMA die mir einen int-Wert liefert(1 oder 0), SOBALD ein doppelter String in einem Array gefunden WIRD. IN C muss man ja immer wieder und wieder das RAD neu erfinden. FALLS jemand so eine Funktion hat, wäre ich ihm sehr dankbar, wenn er/sie mir geben könnte. Bitte HELFT mir, es besteht äußerste Dringlichkeit.So, ich hoffe, für den Anfang ist Dir damit mal geholfen. Ob jemand so eine C-Funktion hat, weiß ich nicht.
das ist ja mal nett. Ich könnte dich gut als privaten Rechtschreibkorrektör gebrauchen^^
Die Rechtscheibkorrektur in Word kann das nicht so gut!
Gruß
Du hast wohl nichts verstanden.
Wenn Du etwas sehr dringend brauchst, dann wende Dich an eine professionelle Hotline und löhne erst mal kräftig.
Ansonsten gedulde Dich bis jemand es liest und Dir helfen kann.
Gruß
Selby
Du hast wohl nichts verstanden.
Wenn Du etwas sehr dringend brauchst, dann wende Dich an eine professionelle Hotline und löhne erst mal kräftig.
Ansonsten gedulde Dich bis jemand es liest und Dir helfen kann.
Gruß
Selby
Hi Selby,
warum so erregt? Ich hoffe nicht meinedwegen :)
Warum soll ich mich an eine Hotline wenden? Ich hab doch keine Waschmaschine gekauft :) Ich hab mir mal sagen lassen, wenn man dringend Hilfe benötigt, frage gute Freunde, oder Familie, oder hilfsbereite Menschen im Internet. Klar kann ich warten, und wenn ich keine Hilfe bekomme, hab ich eben Pech gehaupt. ;)
Grüße
Hallo
Ich bräuchte eine Funktion die mir einen int-Wert liefert(1 oder 0), sowie ein doppelter String in einem Array gefunden wurde.
in C muss [...]
C oder C++?
Nehmen wir an, wir hätten eine Funktion, die zwei Zeichenketten miteinander vergleichen kann, weiter hätten wir eine Möglichkeit, ein Arrayelement nach dem anderen abzuarbeiten. Dann könntest Du wie folgt vorgehen:
meine_suche_string_in_array_von_strings
- Eingabe: zu suchender String (Nadel),
Array von Strings, die überprüft werden sollen (Heuhaufen)
- Rückgabe: 1, wenn Nadel im Heuhaufen gefunden
0, sonst
/* Zu Beginn haben wir die Nadel noch nicht gefunden */
Initialisiere eine Statusvariable mit 0
/* Prüfe nach, ob die Nadel im Heuhaufen zu finden ist */
Für jedes Arrayelement
Wenn das aktuelle Element gleich der Nadel ist
/* Die Nadel wurde gefunden */
Setze die Statusvariable auf 1
Beende den Schleifendurchlauf /* dafür gibt es in C etwas */
/* Fiese Abkürzung: Gebe die 1 zurück */ /* Dafür auch */
Ende Wenn
Ende Für
/* Wurde die Nadel gefunden, so enthält die Statusvariable den Wert 1,
ansonsten hat sie immer noch den Ausgangswert 0 */
Gebe den Inhalt der Statusvariablen zurück
Ende der Funktion
In C und auch in C++ habe ich zulange nichts mehr gemacht, um zu wissen, ob es eine solche Funktion in irgendeiner Bibliothek fertig gibt, ich bezweifle allerdings dass das in C der Fall ist.
Freundliche Grüße
Vinzenz
gudn tach!
ich bräuchte unbedingt schnelle Hilfe. Ich hoffe jemand kann mir helfen, und zwar.
schneller waer's gegangen, wenn du diesen text einfach nicht geschrieben haettest. das spart zeit. ebenso haette es zeit gespart, wenn ich mir diese zwei saetze hier darauf gespart haette. ;-)
Ich bräuchte eine Funktion die mir einen int-Wert liefert(1 oder 0), sowie ein doppelter String in einem Array gefunden wurde.
in <algorithms.h> (oder <algorithm.h> oder so aehnlich) gibt's ein "sort". das kannst du auf dein array ansetzen und anschliessend in einer schleife ein mal durchschauen. das ist (zumindest im worst case) insg. schneller, als jedes element mit jedem zu vergleichen.
prost
seth
Hallo seth,
ich bräuchte unbedingt schnelle Hilfe. Ich hoffe jemand kann mir helfen, und zwar.
schneller waer's gegangen, wenn du diesen text einfach nicht geschrieben haettest. das spart zeit. ebenso haette es zeit gespart, wenn ich mir diese zwei saetze hier darauf gespart haette. ;-)
deswegen hatte ich mir nur die Zeit genommen, die Drängelpassagen einfach zu löschen ...
Ich bräuchte eine Funktion die mir einen int-Wert liefert(1 oder 0), sowie ein doppelter String in einem Array gefunden wurde.
... dafür zu wenig, um diesen Satz richtig zu lesen :-(
Ein beliebiger String in diesem Array gleich einem zweiten beliebigen anderen String im gleichen Array.
in <algorithms.h> (oder <algorithm.h> oder so aehnlich) gibt's ein "sort". das kannst du auf dein array ansetzen und anschliessend in einer schleife ein mal durchschauen. das ist (zumindest im worst case) insg. schneller, als jedes element mit jedem zu vergleichen.
Klar: mein Ansatz käme auf ein MaxSort (oder wie immer man das nennen würde) heraus, mit O(n²), der Bibliothekssortieralgorithmus wird mit O(n*log(n)) arbeiten, dazu noch die maximal n-1 Vergleiche zweier aufeinanderfolgender Arrayelemente, also immer noch mit O(n*log(n)).
Hmm, ich vermute eine Übungsaufgabe für irgendeine Aus- oder Fortbildung :-)
Freundliche Grüße
Vinzenz
Hi,
die zu prüfenden Stings erstrecken sich über das gesammte Array-Feld? Das wäre doch ein relativ einfach zu realisierender Algorithmus, z.B. über sequenzielle Abarbeitung des Arrays und Einzelvergleiche. So wie Vinzenz es beschrieb - dauert da das schreiben des Forumsbeitrages nicht länger als das Schreiben vom Code ;-) ?
Oder bezieht sich das auch auf Teilstrings innerhalb der Array-Felder?
Ciao, Fanny
Hallo Max,
so, nachdem ich hier schon meinen dummen Kommentar abgeliefert habe, kommt noch etwas Code hinterher ;-)
#include <stdio.h>
main() {
char my_Array[10][20]={"A","A","C","D","E","F","G","H","I","J"}; /* "A" ist doppelt ! */
int start; /* Wo soll bei jedem Durchlauf gestartet werden? */
int array_laenge; /* Wie lang ist das Array? */
int i; /* Die uebliche Laufvariable */
int doppelt=0; /* Ist der aktuelle String doppelt vorhanden? */
array_laenge=10; /* Hier bei eigenem Array entsprechend anpassen */
start=0; /* Bei ersten Element starten. C beginnt bei 0 */
while ((doppelt==0) && (start < (array_laenge-1))) { /* Solange nichts doppelt und die Startposition noch nicht das letzte Element erreicht hat */
i=start+1; /* Mit der Suche beim nächsten Element anfangen, sonst findet sich das Element selbst */
while ((doppelt==0) && (i < array_laenge)) { /* Solange beim aktuellen Durchlauf keine doppelten Eintraege gefunden werden */
if (strcmp(my_Array[start],my_Array[i])==0) { /* Wenn das Start-Element und das aktuelle Element gleich sind */
doppelt=1; /* Dann beende die while-Schleife, indem das Kriterien nicht mehr erfuellt ist */
}
else
i++; /* Andernfalls das naechste Element anfassen */
}
if (doppelt==0) /* Wenn nach dem letzten Durchlauf kein doppelter String gefunden wurde */
start++; /* Beginne den nächsten Durchlauf mit dem nächsten Element des Arrays */
}
if (doppelt==1) { /* Wenn ein String doppelt vorkommt */
printf("Der %d. und der %d. String des Arrays sind identisch !\n",start,i); /* Dann die beiden Positionen ausgeben. Haette man start ohne die vorherige Ueberpruefung hochgezaehlt, waere hier eine falsche Position! */
}
else {
printf("Keine doppelten Strings im Array!\n"); /* Gib am Ende aus, dass alles OK ist */
}
}
Gruß
Hans
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