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.


Anmelden zum Antworten