Aufgabe zu String
-
Hi zusammen:
kann mir wer nen kurzen Denkanstoß zu dieser Aufgabe geben, wie ich mich am besten drann macha ... find keinen anständigen ansatz ...
Schreiben Sie eine Funktion replace_first , welche in einem Text eine
Zeichenkette sucht und, falls gefunden, durch eine andere Zeichenkette
ersetzt. Der Funktion werden drei Zeichenkettenparameter übergeben:- text (Originaltext)
- suchmuster (soll im Originaltext gesucht werden)
- ersatztext (soll das Suchmuster - falls vorhanden - ersetzen)Die Funktion soll eine Zeichenkette zurückliefern, welche den geänderten
Text enthält. Beachten Sie, dass je nach Suchmuster und Ersatztext der
geänderte Text kürzer oder länger als der Originaltext sein kann (oder
gleichlang natürlich).
suchmuster ist dabei eine Zeichenkette, in der die Zeichen '?' und '#' eine
besondere Bedeutung als sogenannte Platzhalter haben: '?' steht dabei für ein
beliebiges Einzelzeichen und '#' ist ein Platzhalter für eine Ziffer (0-9).
Beispiele:text suchmuster ersatztext Funktionsergebnis
Schnittblume blume lauch Schnittlauch
Schnittblume n?tt nee Schneeblume
ka7musik4711 k#7 kAB ka7musikAB11
-
malloc() + while + if + strcpy().
-
ok, is'n bisschen zu allgemein, mein problem liegt bei while/if ..
hab mir halt gedacht ich schau ob der anfangsbuchstabe von suchmuster in text vorkommt und dann wenn ja, ob der 2. der nächste ist, aber wie setz ich des am besten im ,find keinen allgemeinen ansatz, vorallem mit dem '?' und '#'für hilfe bin ich dankbar
-
bitte löschen
-
hab mir halt gedacht ich schau ob der anfangsbuchstabe von suchmuster in text vorkommt
Richtig! siehe matches
und dann wenn ja, ob der 2. der nächste ist, aber wie setz ich des am besten im ,find keinen allgemeinen ansatz, vorallem mit dem '?' und '#'
Richtig! siehe match
int match(const char *s,const char *p) { while( *s && *p ) { switch(*p) { case '#': selbermachen; break; case '?': break; default : selbermachen; } ++s,++p; } return *p==0; } const char *matches(const char *s,const char *p) { while( *s ) { if( match(s,p) ) return s; ++s; } return 0; }
-
vielen dank, aber der vorherige beitrag war für mich als einsteiger doch ein bisschen zu allgemein.