Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
Klaar voor een nieuwe uitdaging.
uit je antwoord maak ik op dat het standaard niet aanwezig is en dat ik het
- OF moet bouwen
- OF uit die lib moet halen
oki... aan de slag
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| bool fname_filter(string fname, string filter) { for (int i = 0; i < filter.length(); i++) { char c = filter[i]; if (c == '*') { if (filter.find('*', i + 1) == string::npos) { int j = fname.length() - filter.length() + 1; return j < 0 ? false : fname_filter(fname.substr(i + j), filter.substr(i + 1)); } // for (int j = 0; j < min(fname.length(), filter.length()) - i; j++) for (int j = 0; j < fname.length(); j++) { if (fname_filter(fname.substr(i + j), filter.substr(i + 1))) return true; } return false; } if (c != '?' && c != fname[i]) return false; } return fname.length() == i; } |
http://www.pcre.org/ dusxychix schreef op 18 november 2003 @ 15:11:
die ken ik niet..
uit je antwoord maak ik op dat het standaard niet aanwezig is en dat ik het
- OF moet bouwen
- OF uit die lib moet halen
oki... aan de slag
Klaar voor een nieuwe uitdaging.
thanks.. maar dat word iets als dit bouwen in C... geen ++OlafvdSpek schreef op 18 november 2003 @ 15:11:
Als je alleen '?' en '*' nodig hebt en geen volledige regex, dan kun je de volgende (hopelijk bug-vrije) code gebruiken:
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 bool fname_filter(string fname, string filter) { for (int i = 0; i < filter.length(); i++) { char c = filter[i]; if (c == '*') { if (filter.find('*', i + 1) == string::npos) { int j = fname.length() - filter.length() + 1; return j < 0 ? false : fname_filter(fname.substr(i + j), filter.substr(i + 1)); } // for (int j = 0; j < min(fname.length(), filter.length()) - i; j++) for (int j = 0; j < fname.length(); j++) { if (fname_filter(fname.substr(i + j), filter.substr(i + 1))) return true; } return false; } if (c != '?' && c != fname[i]) return false; } return fname.length() == i; }
PCRE.org there we go
[ Voor 6% gewijzigd door xychix op 18-11-2003 15:18 ]
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
Dit is toch redelijk letterlijk naar C te vertalen?xychix schreef op 18 november 2003 @ 15:13:
thanks.. maar dat word iets als dit bouwen in C... geen ++
PCRE.org there we go
Maar waarom C in plaats van C++?
niet een speciale reden.. wil gewoon in C blijven met dit tooltje.. lekker met pointers smijten enzo... ja ik weet dat dat ook in C++ kan.....OlafvdSpek schreef op 18 november 2003 @ 15:18:
[...]
Dit is toch redelijk letterlijk naar C te vertalen?
Maar waarom C in plaats van C++?
En een vertaal actie zal het ook wel worden.. ik zie in die pcre.h nou niet echt handige funcities.
[ Voor 15% gewijzigd door xychix op 18-11-2003 15:25 ]
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
ik zou van die string's wel const string &'s maken, dat scheelt een hoop gegooi met geheugen bij lange strings e.d.OlafvdSpek schreef op 18 november 2003 @ 15:11:
Als je alleen '?' en '*' nodig hebt en geen volledige regex, dan kun je de volgende (hopelijk bug-vrije) code gebruiken:
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Kun je in C++ niet lekker met pointers smijten dan?xychix schreef op 18 november 2003 @ 15:25:
niet een speciale reden.. wil gewoon in C blijven met dit tooltje.. lekker met pointers smijten enzo... ja ik weet dat dat ook in C++ kan.....
jazeker wel, ik gaf dat ook al aan.... ik heb er geen reden voorOlafvdSpek schreef op 18 november 2003 @ 15:29:
[...]
Kun je in C++ niet lekker met pointers smijten dan?
ik vind een char* gewoon leuker dan een string denk ik...
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
[ Voor 72% gewijzigd door .oisyn op 18-11-2003 15:43 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Heb ik net gedaan (is ook handiger met debuggen), ondanks dat ik nog een implementatie heb die met reference counting werkt..oisyn schreef op 18 november 2003 @ 15:29:
ik zou van die string's wel const string &'s maken, dat scheelt een hoop gegooi met geheugen bij lange strings e.d.
Maar in C++ kun je toch ook met char* werken?xychix schreef op 18 november 2003 @ 15:35:
jazeker wel, ik gaf dat ook al aan.... ik heb er geen reden voor
ik vind een char* gewoon leuker dan een string denk ik...
laten we gaan testen...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int strregcmp(const char * a, const char * b);
int main(int argc, char **argv)
{
printf("%d = strregcmp(%s,%s);",strregcmp(argv[1],argv[2]), argv[1],argv[2]);
}
int strregcmp(const char * a, const char * b)
{
char *needle;
char *home;
char *p;
//copy the input to own mem space
home = (char*)malloc(strlen(a)+1);
strcpy(home,a);
needle = (char*)malloc(strlen(b)+1);
strcpy(needle,b);
//strip the starting * from needle
for(;*needle=='*';needle++);
//strip the ending * from needle
for(p=(needle + strlen(needle)-1);*p=='*';p--)*p=0x00;
//zorg dat needle alleen het eerst volgende stukje is omvat
while(needle < p)
{
if(p = strstr(needle,"*"))*p=0x00;
if(!(home=strstr(home,needle)))
{
return(-1);
}
else
{
needle = p+1;
}
}
return(0);
} |
[ Voor 33% gewijzigd door xychix op 18-11-2003 16:15 ]
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
Maar zoals al gemeld zijn er mensen die eerder met dit probleem hebben geworsteld en hun werk beschikbaar hebben gesteld.
offtopic:
Olie op vuur: Waarom zou je C++ gebruiken als je ook C kunt gebruiken?.oisyn schreef op 18 november 2003 @ 15:43:
Waarom dan? Wat kun je met char * wat je niet met std::string kan?
Een paar redenen om C ipv C++ te gebruiken
1) Je past een programma aan en dat programma was al in C
2) Je kunt beter met C overweg dan met C++
3) Je bent te lui om C++ te leren
4) Dat wat je wilt is zo simpel of straight forward dat het in C makkelijker/sneller is dan in C
5) Het probleem is makkelijker in een functionele taal dan in een object georienteerde taal.
etc
etc
etc
alleereerst dank voor je antwoord...ritsjoena schreef op 18 november 2003 @ 16:01:
Olie op vuur: Waarom zou je C++ gebruiken als je ook C kunt gebruiken?
2 PLEASE niet een C vs. C++ discussie hier.... please ???
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
waarom C gebruiken als je ook pascal kunt gebruiken? Dat is net zo'n onzinnige opmerking imhoritsjoena schreef op 18 november 2003 @ 16:01:
Olie op vuur: Waarom zou je C++ gebruiken als je ook C kunt gebruiken?
dat is idd een zinnige reden, maar daar ging het hier niet om. Het originele programma van de topicstarter is waarschijnlijk C, maar het ging ons erom waarom hij niet wilt overwegen om de overstap naar C++ te doen. Dus waarom ie niet gewoon überhaupt in C++ is begonnen met z'n programmaEen paar redenen om C ipv C++ te gebruiken
1) Je past een programma aan en dat programma was al in C
Het gros van de C programma's compileert ook onder een C++ compiler, dus dat maakt niet zoveel uit. Je zit alleen met een ietwat strictere typechecking (zoals conversies van void * naar T * die niet zomaar mogen in C++ maar wel in C). Ik heb zelf ook ooit de overstap van C naar C++ gedaan door gewoon C code te schrijven en door een C++ compiler te gooien, en ben langzamerhand gewoon steeds meer en meer C++ features gaan gebruiken.2) Je kunt beter met C overweg dan met C++
Daarom snap ik het nut ook niet helemaal om niet C++ te programmeren. C++ is niet anders, het is slechts meer. De argumenten die je geeft gaan veel meer op als je bijvoorbeeld C met Java vergelijkt oid, maar niet bij C vs. C++
Je bent niet verplicht om de C++ features te gebruiken, dat is het mooie ervan
vind ik geen valide reden, zeker als je punt 2 in overweging neemt. Bovendien schrijft een C++ programma, zeker als je een geoefend C++ programmeur bent, velen malen sneller weg dan een C programma. Veel dingen hoef je niet meer zelf te implementeren, zoals dynamische arrays, gelinkte lijsten, hash tables, memory management, etc. Het loont dus zeker de moeite om even die extra moeite erin te steken om het te leren, want die extra tijd die je erin steekt heb je er zo weer uit3) Je bent te lui om C++ te leren
Zie 2)4) Dat wat je wilt is zo simpel of straight forward dat het in C makkelijker/sneller is dan in C++
Zie 2), bovendien bedoel je procedurele taal, een functionele taal is heel wat anders5) Het probleem is makkelijker in een functionele taal dan in een object georienteerde taal.
daar kan ik niets meeetc
etc
etc
De meest valide reden die ik kan bedenken en die niet in je rijtje staat is dat de C++ compiler voor het platform waarvoor je ontwikkelt niet bestaat of heel brak is
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Een andere reden om C te gebruiken is overigens dat de opgever dat wil en ja veel argumenten gelden voor elke overstap.
Waar ik af en toe wel moe van wordt en wat mijn reactie eigenlijk inhoud is dat vaak beweerd wordt dat C++ beter/superieur is dan/aan C, terwijl dat eigenlijk niet zo is.
Alles wat je in C++ kan kun je ook in C. Sommige dingen zijn in de ene taal makkelijker dan in de andere taal, maar het kan beide.
Het is de kunst om de juiste taal voor het juiste probleem te kiezen of het nu C, C++ of welke andere taal dan ook is te kiezen.
Bedankt voor het mij erop wijzen dat ik de termen weer eens door elkaar gehaald heb. ;9
Oh ja?ritsjoena schreef op 18 november 2003 @ 16:49:
Alles wat je in C++ kan kun je ook in C. Sommige dingen zijn in de ene taal makkelijker dan in de andere taal, maar het kan beide.
Met C++ bedoel ik eigenlijk alleen maar het gebruik van een C++ compiler/extensie en niet het gebruik van OO en STL.
Als je (of iemand anders) dan later wel OO of STL wil gebruiken is dat mogelijk, terwijl als je met een C compiler begint, dat eigenlijk niet meer te doen is.
agreed, maar ik had het meer over de hobby-sfeer. Als je gewoon werkt dan heb je zelf over het algemeen vrij weinig in te brengen over de keuze van de gebruikte taal, en dan zijn alle hierboven genoemde argumenten al niet meer relevantritsjoena schreef op 18 november 2003 @ 16:49:
Een andere reden om C te gebruiken is overigens dat de opgever dat wil en ja veel argumenten gelden voor elke overstap.
Uhm, ik zou toch wel willen zeggen dat C++ beter en superieur is aan C. C++ is namelijk min of meer een superset van C, dus het heeft alles wat C heeft, en nog meer. Dat maakt het automatisch al superieurWaar ik af en toe wel moe van wordt en wat mijn reactie eigenlijk inhoud is dat vaak beweerd wordt dat C++ beter/superieur is dan/aan C, terwijl dat eigenlijk niet zo is.
Als je je stelling omdraait gaat ie beter op, maar idd. Natuurlijk kun je in C OO programmeren. Maar wil je dat ook? Wil je al die extra tijd erin steken als je ook gewoon C++ kan kiezen, die dat vanuit de fabriek al ondersteund? Als je dan bij C blijft hangen heeft dat imho gewoon meer te maken met eigenwijs zijn dan met een goede reden hebben om geen C++ te kiezenAlles wat je in C++ kan kun je ook in C. Sommige dingen zijn in de ene taal makkelijker dan in de andere taal, maar het kan beide.
Mee eens, maar aangezien C++ kan wat C kan (zonder moeilijk te doen, want andersom wel zo is), maakt dat C++ ook automatisch ergens voor geschikt als C daar ook geschikt voor isHet is de kunst om de juiste taal voor het juiste probleem te kiezen of het nu C, C++ of welke andere taal dan ook is te kiezen.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
als iemand lekken / gaten ziet.... GRAAG!!! ff melden
owja * staat voor iets tussen de 0 en N tekens..
strregcmp("aaaa","***a***a***a***a***") is dus GELDIG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int strregcmp(const char * a, const char * b);
int main(int argc, char **argv)
{
printf("%d = strregcmp(%s,%s);\n",strregcmp(argv[1],argv[2]), argv[1],argv[2]);
}
int strregcmp(const char * a, const char * b)
{
char *needle;
char *home;
char *p;
char *homeEnd;
//copy the input to own mem space
home = (char*)malloc(strlen(a)+1);
strcpy(home,a);
needle = (char*)malloc(strlen(b)+1);
strcpy(needle,b);
//strip the starting * from needle
for(;*needle=='*';needle++);
//strip the ending * from needle
for(p=(needle + strlen(needle)-1);*p=='*';p--)*p=0x00;
homeEnd = home + strlen(home);
//zorg dat needle alleen het eerst volgende stukje is omvat
while(home < homeEnd)
{
if(p = strstr(needle,"*"))
{
*p=0x00;
}
else
{
//dit is gegarandeerd het laaste te vergelijken stukkie
if(strstr(home,needle))
return(0);
else
return(-1);
}
if((home=strstr(home,needle) + strlen(needle)))
{
//gevonden maar nog needle over!
for(needle=p+1;*needle=='*';needle++);
//printf("home : %s\nneedle : %s\n",home,needle);
}
else
{
//not found. meteen maar kappen
return(-1);
}
}
return(-1);
} |
[ Voor 17% gewijzigd door xychix op 18-11-2003 18:57 ]
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
1. Waarom zet je main boven in plaats van onderaan?
2. Je bent return in main vergeten.
3. Je indentatie (sp?) klopt niet.
4. De code crashed als je geen argumenten meegeeft.
5. Kijk eens naar strdup (in plaats van strlen en malloc).
6. Gevonden: 0 = strregcmp(aabaabaa,*a*b)
[ Voor 90% gewijzigd door Olaf van der Spek op 18-11-2003 19:24 ]
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Jammer ??? je wilt juist niet de originelen verklotenSoultaker schreef op 18 november 2003 @ 19:20:
Ik vind het jammer dat je de argumenten intern moet kopiëren; misschien kun je je code zo aanpassen dat dat niet meer nodig is. Als je dan toch gaat kopiëren, moet je in ieder geval het gealloceerde geheugen weer vrijgeven en bovendien is het makkelijker om strdup() te gebruiken.
SCHAAM... idd moet nog freeeen
strdup() zoeken we op
en JA tuurlijk klapt ie zonder input.. maar ik had ut meer over de functie
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad
Hij wil een functie die de input niet modified (en niet copied).xychix schreef op 18 november 2003 @ 19:27:
Jammer ??? je wilt juist niet de originelen verkloten
SCHAAM... idd moet nog freeeen
strdup() zoeken we op
en JA tuurlijk klapt ie zonder input.. maar ik had ut meer over de functiebouw dr dan zelf ff een nette main bij
Nettere main:
1
2
3
4
5
6
| int main(int argc, char **argv) { if (argc >= 2) printf("%d = strregcmp(\"%s\", \"%s\");\n",strregcmp(argv[1],argv[2]), argv[1],argv[2]); return 0; } |
Verwijderd
Er is momenteel een betere regex voor c++, begrijp dat deze ook potentiëel kandidaat is om in de standaard op te worden genomen. Zie GRETA. Voordeel is dat het wat meer gebruik maakt van de ++-punten van C++ dan Boost:RegEx. Dit is trouwens dat Microsoft product, begrijp dat het in principe 2 native intefaces heeft (eentje voor statische expressies en eentje voor dynamische), misschien dat die dynamische interface gelijk is aan Boost:RegEx maar het is juist die statische (compiletime) interface die interessant is.MSalters schreef op 18 november 2003 @ 19:16:
Wel C++ noemen, en niet op boost::regex wijzen is wel zonde. Dat wordt zelfs zo goed als zeker std::regex, het is dus een blijvertje ( de interface dan, Microsoft heeft al een alternatieve implementatie. Regex optimalisatie is nog steeds actueel. )
Of anders is er altijd nog Spirit, tegenwoordig ook onderdeel van Boost maar de ontwikkelingen gaan iets sneller op de Spirit site. GRETA is trouwens geïnspireerd door Spirit; intern vertonen ze zeer veel overeenkomsten en momenteel wordt er zelfs gewerkt om beide libraries bijeen te voegen (beide ontwikkelaars zijn dan ook werknemers van boost-consulting.com).
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein