string durch einen anderen ersetzen



  • Hallo zusammen!
    Könntet ihr mir sagen, wie ich einen String in einem existierenden String suche und dann durch einen anderen ersetze?

    Danke
    trojan



  • Hi.
    Das sollte sein, was du suchst:

    char    *strstr (const char *, const char *);
    


  • @trojan, schau dir mal meine Beispielimplementierung einer Funktion zum Ersetzen von Strings an. Für alle Kritiker: Klar man kann das besser machen...ist halt nur als Beispiel anzusehen 🙂

    char *replace( char *pSrc, char *pSrch, char *pRepl )
    {
      size_t nSrc;
      size_t nSrch;
      size_t nRepl;
      char *pFound;
      char *pRes;
    
      if ( !pSrc || !pSrch || !pRepl )
        return NULL;
    
      nSrch = strlen( pSrch );
      nRepl = strlen( pRepl );
    
      pFound = strstr( pSrc, pSrch );
      if ( pFound )
      {
        if ( nSrch == nRepl )
          strncpy( pFound, pRepl, nRepl );
        else
        {
          nSrc = strlen( pSrc );
          pRes = malloc( nSrc -nSrch +nRepl +1 );
          if ( pRes )
          {
            pRes[0] = '\0';
            strncat( pRes, pSrc, pFound -pSrc );
            strncat( pRes, pRepl, nRepl );
            strcat( pRes, pFound +nSrch );
            free( pSrc ); 
          };
        };
      };
    
      return pSrc;
    };
    


  • Danke für die Codes! Werde es direkt mal ausprobieren!



  • Hallo Hermann

    Danke für deine Funktion, aber es steckt ein kleiner Wurm drin:

    if ( pRes )
          {
            pRes[0] = '\0';
            strncat( pRes, pSrc, pFound -pSrc );
            strncat( pRes, pRepl, nRepl );
            strcat( pRes, pFound +nSrch );
            free( pSrc );
          };
    

    müsste besser so aussehen:

    if ( pRes )
          {
            pRes[0] = '\0';
            strncat( pRes, pSrc, pFound -pSrc );
            strncat( pRes, pRepl, nRepl );
            strcat( pRes, pFound +nSrch );
            free( pSrc );
            return pRes;
          };
    

    Andernfalls löscht du nur den Quellstring, versuchst dann aber - nachdem du aus den IF verschachtelungen raus bist - diesen zurück zu geben.

    Gruß
    Marco


Anmelden zum Antworten