Badwordlist ...
-
Hallo,
also folgendes ich habe meinen IRC Bot um eine Badwortliste erweiter ok das klappt auch fast einigstes Problem ich bräcute eine vollständige Badwordliste meine beinhaltet nur 4 Testwörter. 2tes Problem ich mäcute gerne das Casesensitive raus haben. Jemand eine Idee ?Hier der Code :
FILE *datei; datei = fopen("badword.cfg","r"); if(datei!=NULL) { char zeile[1024]; while (!feof(datei)) { fgets(zeile,1024,datei); if(strncmp(zeile,Nachricht,14) == 0) { sscanf(Absender1,"~%s",Absender1); printf("Kicke %s (BadWord) !\n",Absender1); strcpy(buf,"KICK "); AddToStringC(buf, Channel); AddToStringC(buf, " "); AddToStringC(buf, Absender1); AddToStringC(buf, " BadWord!"); AddToStringC(buf, "\r\n"); send(s,buf,strlen(buf),0); } } } else { printf("Fehler beim oeffnen der Datei!\n"); }
Optimierungsvorschläge sidn bei mir auch gerne wilkommen
Gruß
-
Mach alle Buchstaben klein/groß und vergleiche dann mit der Liste (da müssen sie natürlich auch so stehen). Optimierungsvorschläge gibts bei mir nur in C++ oder bei einer einmaligen Einrichtungsgebühr für nur 99,99€. Sie sparen 30%
-
non case sensitive Vergleich:
http://www.unet.univie.ac.at/aix/libs/basetrf2/strcmp.htmWas du mit den "nur 4 Wörtern" meinst ist mir nicht klar...
-
Caseinsentives Vergleichen ist langsam, viel schneller gehts wenn du einfach alles beim Einlesen GROSSSCHREIBST.
Also mit:
#include<ctype.h> void to_uppercase(char*begin,char*end){ for(;begin!=end;++begin) *begin=tolower(*begin); }
Drüber gehst.
-
Irgendwer schrieb:
Caseinsentives Vergleichen ist langsam, viel schneller gehts wenn du einfach alles beim Einlesen GROSSSCHREIBST.
Also mit:
#include<ctype.h> void to_uppercase(char*begin,char*end){ for(;begin!=end;++begin) *begin=tolower(*begin); }
Drüber gehst.
Ich bezweifle, dass es bei einem IRC Bot auf Geschwindigkeit ankommt
-
Das mit den 4 Wörtern war so gemeint das meine eigene BadWordliste zum Testen nur 4 Wörter beinhaltet daher brauche ich unbedingt eine vernünftige die mehr besitzt aber 5 sind auch noch zu wenig
Gruß
-
Dummie schrieb:
Das mit den 4 Wörtern war so gemeint das meine eigene BadWordliste zum Testen nur 4 Wörter beinhaltet daher brauche ich unbedingt eine vernünftige die mehr besitzt aber 5 sind auch noch zu wenig
GrußDann schreib doch einfach eine längere...
-
Soviele fallen mir aber nicht ein, gibts da nichts fertiges ?
Naja das mti case sensitive klappt jedenfalls
Gruß
Danke
-
Ich habe nciht bemerkt das ,dass ganze nur funktioniert wenn es am anfang steht wenn es mit in einem Satz steth klappt das ganze nicht mehr noch jemand ne Idee ?
Gruß
EDIT :
if(strnicmp(zeile,Nachricht,14)) { ... }
-
evtl. ist strstr eher für Dich geeignet.
strstr sucht nach einem String innerhalb des strings
strstr liefert einen Zeiger an die Stelle, an der der Anfang der Teilzeichenkette gefunden wurde oder NULL falls er nicht gefunden wurde.
strstr(zeile, "Blödmann");
-
Ja das hab ich auch gedacht nur dann haben wir wieder das Problem ?
Genau wir haben wieder das Problem mit dem Case Sensitive es msus eine andere möglichkeit geben die beides zusammen bietet
Da brauche ich nun wirklich eure hifle
-
Die Lösung hab ich doch bereits gepostet! Zuerst alles Uppercase (oder Lowercase wenn du willst) machen und dann casesenitiv vergleichen.
@interpreter
Trotzdem ist das kein Grund Geschindigkeit zu verschwenden, denn nach jeder Eingabe alles Uppercase zu machen ist ja nicht sonderlich schwierig oder (programierer)zeitraubend also ist es meiner Meinung wert.
-
Irgendwer schrieb:
@interpreter
Trotzdem ist das kein Grund Geschindigkeit zu verschwenden, denn nach jeder Eingabe alles Uppercase zu machen ist ja nicht sonderlich schwierig oder (programierer)zeitraubend also ist es meiner Meinung wert.Schön. Und warum umständlich wenns ne Funktion gibt, die das alles schon macht und effizient implementiert wurde?
-
interpreter schrieb:
Schön. Und warum umständlich wenns ne Funktion gibt, die das alles schon macht und effizient implementiert wurde?
Welche denn?
stricmp ist kein Standard. Warum dass so ist, habe ich mich aber auch schon oft gefragt...
-
Selbst wenn ich strstr nehme und das Problem mit dem case sensitvie gelöst habe gibts immernoch ein Problem : SChreibt man z.B Ich habe gesterb einen Basch*
gefangen dann wird man aus dem Channel ohne Grund geschmissen. Das macht mir zurzeit mehr SorgenGruß
EDIT :
Mir ist aufgefallen das dies Forum das gleiche Problem hat !
-
Dann geh doch die Zeile Wort für Wort durch (' ' ist schließlich ein Trennzeichen zwischen 2 Worten).
-
Shade Of Mine schrieb:
Welche denn?
stricmp ist kein Standardstrcmpi auch nicht?
/Edit: Tatsache... scheint so als ob es keinen cse-insesitive Compare gibt im Standard... Sachen gibt's...