🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#154
Author: Daniel Arndt
Date: Fri, 13 Oct 1995 16:45
16 lines
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
#155
Author: Ralf W. Stephan
Date: Sat, 14 Oct 1995 08:53
16 lines
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
#156
Author: Christian Weisgerber
Date: Sat, 14 Oct 1995 14:38
16 lines
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
#157
Author: plugge
Date: Tue, 17 Oct 1995 06:24
73 lines
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