Thread View: de.comp.lang.c++
4 messages
4 total messages
Started by Daniel Arndt
Fri, 13 Oct 1995 16:45
strstr() mit Pattern Matching
Author: Daniel Arndt
Date: Fri, 13 Oct 1995 16:45
Date: Fri, 13 Oct 1995 16:45
16 lines
1200 bytes
1200 bytes
Hallo, ich suche fuer Unix eine C-Function zum Pattern Matching. Die Funktion soll - aehnlich wie strstr() - in einem String nach einem Suchstring suchen. Der Suchstring soll dabei aber * (Ersatz fuer mehrere Zeichen) sowie ? (Ersatz fuer ein Zeichen) enthalten. Also wie bei Dos oder Unix. Kompliziertere Sachen wie a[123]b fuer a1b, a2b oder a3b brauch ich nicht. Waere toll, wenn mir jemand helfen koennte. Vielen Dank schon mal. Gruss Daniel -- -------------------------------------------------------------------------- Daniel Arndt arndt@RCS.urz.tu-dresden.de --------------------------------------------------------------------------
Re: strstr() mit Pattern Matching
Author: Ralf W. Stephan
Date: Sat, 14 Oct 1995 08:53
Date: Sat, 14 Oct 1995 08:53
16 lines
1062 bytes
1062 bytes
Daniel Arndt writes: > ich suche fuer Unix eine C-Function zum Pattern Matching. Die Funktion soll > - aehnlich wie strstr() - in einem String nach einem Suchstring suchen. Der > Suchstring soll dabei aber * (Ersatz fuer mehrere Zeichen) sowie ? (Ersatz fuer > ein Zeichen) enthalten. Also wie bei Dos oder Unix. Kompliziertere Sachen > wie a[123]b fuer a1b, a2b oder a3b brauch ich nicht. Wir sind hier in d.c.l.c++ --- dementsprechend die Antwort: Wenn Du den gcc hast, kannst Du bequem die libg++ und deren String und Regex Klassen dafür hernehmen. RTF info libg++ ralf -- PGP: 1024/0xA713ECE9 2047/0xC8E605F5
Re: strstr() mit Pattern Matching
Author: Christian Weisgerber
Date: Sat, 14 Oct 1995 14:38
Date: Sat, 14 Oct 1995 14:38
16 lines
994 bytes
994 bytes
Daniel Arndt <arndt> writes:
> ich suche fuer Unix eine C-Function zum Pattern Matching. Die Funktion soll
> - aehnlich wie strstr() - in einem String nach einem Suchstring suchen. Der
> Suchstring soll dabei aber * (Ersatz fuer mehrere Zeichen) sowie ? (Ersatz fuer
> ein Zeichen) enthalten. Also wie bei Dos oder Unix. Kompliziertere Sachen
> wie a[123]b fuer a1b, a2b oder a3b brauch ich nicht.
wildmat(3)
Ist bei INN dabei.
--
Christian 'naddy' Weisgerber naddy@mips.pfalz.de
See another pointless homepage at http://www.rhein-neckar.de/~mips/.
-- currently reading: Philip José Farmer, A Private Cosmos --
Re: strstr() mit Pattern Matching
Author: plugge
Date: Tue, 17 Oct 1995 06:24
Date: Tue, 17 Oct 1995 06:24
73 lines
2997 bytes
2997 bytes
> ich suche fuer Unix eine C-Function zum Pattern Matching. Die Funktion soll
> - aehnlich wie strstr() - in einem String nach einem Suchstring suchen. Der
> Suchstring soll dabei aber * (Ersatz fuer mehrere Zeichen) sowie ? (Ersatz fuer
> ein Zeichen) enthalten. Also wie bei Dos oder Unix. Kompliziertere Sachen
> wie a[123]b fuer a1b, a2b oder a3b brauch ich nicht.
Ich habe einmal ein Prograemmchen verbrochen, das gerade das macht, was Du suchst.
Ich kopiere Dir unten den Quellcode dazu; die Funktion xstrcmp erledigt das strstr
mit pattern matching.
Viele Gruesse
Michel
#include stdio
#include ctype
main(int argc,char *argv[])
{
char buffer[128],*ptr=buffer;
int i;
FILE *datei;
if(*argv[2]=='-'){
ptr=argv[2]+1;
if(_toupper(*ptr)=='H'){
printf("%s%s%s%s","\nAcronyms: Das Programm sucht aus einer Liste Abkürzungen heraus.\n",
"Wildcards sind % für ein Zeichen, * für beliebig viele Zeichen\n",
"(auch 0). Nach * bzw. % können noch weitere Buchstaben folgen.\n",
"Gross/Kleinschreibung wird nicht berücksichtigt.\n");
exit(1);
}
}
if(argc<3)exit(1);
if((datei=fopen(argv[1],"r"))==NULL){
printf("Datei %s nicht gefunden; Abbruch",argv[1]);
exit(4);
}
for(i=0;ptr!=NULL;i++){
ptr=fgets(buffer,127,datei);
if(xstrcmp(buffer,argv[2]))printf("%s",buffer);
}
fclose(datei);
}
int xstrcmp(char *str1,char *str2)
{
char *ptr1=str1,*ptr2=str2;
for(;;ptr1++,ptr2++){
if(*ptr2=='%')continue;
if(*ptr2=='*'){
if(*++ptr2=='*'){ /* 2 mal '*' hintereinander */
ptr1--; /* Korrektur für ptr1 (nicht erhöhen) */
continue;
}
if(*ptr2=='%')continue;
if(*ptr2==0||*ptr2==32)return(1);
if(*ptr1==32 ||*ptr1==8||*ptr1==9||*ptr1==0)return(0);
while(*ptr1> 0 && *ptr1!=32 && *ptr1!=8 && *ptr1!=9 &&
_tolower(*ptr1)!=_tolower(*ptr2)){
ptr1++;
if(*ptr1==0||*ptr1==32||*ptr1==8||*ptr1==9)return(0);
}
if(_tolower(*ptr1)==_tolower(*ptr2))
continue; /* weiter testen */
else
return(0);
}
if((*ptr2==0 &&(*ptr1==32||*ptr1==8||*ptr1==9)))return(1); /* String2 ist in 1 enthalten */
if(_tolower(*ptr1)!=_tolower(*ptr2))return(0); /* Ungleichheit */
}
}
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads