string search and replace

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • int main(void)

    #1

    string search and replace

    Hi all,

    Following is my attempt to write a string search and replace
    function.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    /*-------------------------------------------------------------------------------------------
    | Function name : strrep
    |
    | Arguments : src,find,rep
    |
    | src string should be *big* enough to hold the result
    |
    | Return Value : Number of replacements made |
    --------------------------------------------------------------------------------------------*/
    int strrep(char *src,const char *find,const char *rep)
    {
    char *remaining; /* pointer to the left over part
    */
    int count = 0; /* no. of replacements
    */
    size_t find_len = strlen(find); /* length of find string
    */
    size_t rep_len = strlen(rep); /* length of replace string */

    if(find_len == 0) return 0; /* nothing to find */

    /*Initially allocate memory to store whole of src */
    if( (remaining = malloc(strlen(s rc) + 1)) == NULL) /*remember to
    free this*/
    {
    printf("Sorry out of memory !");
    return 0;
    }
    while( (src = strstr(src,find )) != NULL ) /* get the matching
    position */
    {
    count++; /*Count the num of
    replacements*/
    strcpy(remainin g,src + find_len); /*store left over string
    */
    strcpy(src,rep) ; /*make the
    replacement */
    src += rep_len; /*move to end of
    replacement */
    strcpy(src,rema ining); /*copy back the left
    over part */
    }

    free(remaining) ;
    return count;
    }


    I know that this code is inefficient (it uses all the string
    library routines),
    I wanted to know how to improve this code. Can anyone help me ?
    I want to know how you would implement the same function
    I know that there are some Regex libraries to do this effectively.
    But why is such a common function not there in standard library ?


    Thanks for your time,
    Yugi

  • int main(void)

    #2
    Re: string search and replace


    int main(void) wrote:
    Hi all,
    >
    Following is my attempt to write a string search and replace
    function.
    >
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    /*-------------------------------------------------------------------------------------------
    | Function name : strrep
    |
    | Arguments : src,find,rep
    |
    | src string should be *big* enough to hold the result
    |
    | Return Value : Number of replacements made |
    --------------------------------------------------------------------------------------------*/
    int strrep(char *src,const char *find,const char *rep)
    {
    char *remaining; /* pointer to the left over part
    */
    int count = 0; /* no. of replacements
    */
    size_t find_len = strlen(find); /* length of find string
    */
    size_t rep_len = strlen(rep); /* length of replace string */
    >
    if(find_len == 0) return 0; /* nothing to find */
    >
    /*Initially allocate memory to store whole of src */
    if( (remaining = malloc(strlen(s rc) + 1)) == NULL) /*remember to
    free this*/
    {
    printf("Sorry out of memory !");
    return 0;
    }
    while( (src = strstr(src,find )) != NULL ) /* get the matching
    position */
    {
    count++; /*Count the num of
    replacements*/
    strcpy(remainin g,src + find_len); /*store left over string
    */
    strcpy(src,rep) ; /*make the
    replacement */
    src += rep_len; /*move to end of
    replacement */
    strcpy(src,rema ining); /*copy back the left
    over part */
    }
    >
    free(remaining) ;
    return count;
    }
    >
    >
    I know that this code is inefficient (it uses all the string
    library routines),
    I wanted to know how to improve this code. Can anyone help me ?
    I want to know how you would implement the same function
    I know that there are some Regex libraries to do this effectively.
    But why is such a common function not there in standard library ?
    >
    >
    Thanks for your time,
    Yugi

    Sorry for that bad layout. This would be good.

    Hi all,


    Following is my attempt to write a string search and replace
    function.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    /*---------------------------------------------------------------------------
    | Function name : strrep
    | Arguments : src,find,rep
    | src string should be *big* enough to hold the result
    | Return Value : Number of replacements made
    ----------------------------------------------------------------------------*/
    int strrep(char *src,const char *find,const char *rep)
    {
    char *remaining; /*pointer to the left over part */
    int count = 0; /* no.of replacements*/
    size_t find_len = strlen(find);/*length of find string*/
    size_t rep_len = strlen(rep);/*length of replace string*/

    if(find_len == 0) return 0; /* nothing to find */

    /*Initially allocate memory to store whole of src */
    if( (remaining = malloc(strlen(s rc) + 1)) == NULL)
    {
    printf("Sorry out of memory !");
    return 0;
    }
    /* get the matching position*/
    while( (src = strstr(src,find )) != NULL )
    {
    count++; /*Count the num of replacements*/
    strcpy(remainin g,src + find_len); /*store left over string */
    strcpy(src,rep) ; /*make the replacement*/
    src += rep_len; /*move to end of replacement*/
    strcpy(src,rema ining); /*copy back the left over part*/
    }

    free(remaining) ;
    return count;
    }


    I know that this code is inefficient (it uses all the string
    library routines),
    I wanted to know how to improve this code. Can anyone help me ?
    I want to know how you would implement the same function
    I know that there are some Regex libraries to do this effectively.
    But why is such a common function not there in standard library ?


    Thanks for your time,
    Yugi

    Comment

    • int main(void)

      #3
      Re: string search and replace


      int main(void) wrote:
      Hi all,
      >
      Following is my attempt to write a string search and replace
      function.
      >
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      /*-------------------------------------------------------------------------------------------
      | Function name : strrep
      |
      | Arguments : src,find,rep
      |
      | src string should be *big* enough to hold the result
      |
      | Return Value : Number of replacements made |
      --------------------------------------------------------------------------------------------*/
      int strrep(char *src,const char *find,const char *rep)
      {
      char *remaining; /* pointer to the left over part
      */
      int count = 0; /* no. of replacements
      */
      size_t find_len = strlen(find); /* length of find string
      */
      size_t rep_len = strlen(rep); /* length of replace string */
      >
      if(find_len == 0) return 0; /* nothing to find */
      >
      /*Initially allocate memory to store whole of src */
      if( (remaining = malloc(strlen(s rc) + 1)) == NULL) /*remember to
      free this*/
      {
      printf("Sorry out of memory !");
      return 0;
      }
      while( (src = strstr(src,find )) != NULL ) /* get the matching
      position */
      {
      count++; /*Count the num of
      replacements*/
      strcpy(remainin g,src + find_len); /*store left over string
      */
      strcpy(src,rep) ; /*make the
      replacement */
      src += rep_len; /*move to end of
      replacement */
      strcpy(src,rema ining); /*copy back the left
      over part */
      }
      >
      free(remaining) ;
      return count;
      }
      >
      >
      I know that this code is inefficient (it uses all the string
      library routines),
      I wanted to know how to improve this code. Can anyone help me ?
      I want to know how you would implement the same function
      I know that there are some Regex libraries to do this effectively.
      But why is such a common function not there in standard library ?
      >
      >
      Thanks for your time,
      Yugi

      Sorry for that bad layout. This would be good.

      Hi all,


      Following is my attempt to write a string search and replace
      function.

      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      /*---------------------------------------------------------------------------
      | Function name : strrep
      | Arguments : src,find,rep
      | src string should be *big* enough to hold the result
      | Return Value : Number of replacements made
      ----------------------------------------------------------------------------*/
      int strrep(char *src,const char *find,const char *rep)
      {
      char *remaining; /*pointer to the left over part */
      int count = 0; /* no.of replacements*/
      size_t find_len = strlen(find);/*length of find string*/
      size_t rep_len = strlen(rep);/*length of replace string*/

      if(find_len == 0) return 0; /* nothing to find */

      /*Initially allocate memory to store whole of src */
      if( (remaining = malloc(strlen(s rc) + 1)) == NULL)
      {
      printf("Sorry out of memory !");
      return 0;
      }
      /* get the matching position*/
      while( (src = strstr(src,find )) != NULL )
      {
      count++; /*Count the num of replacements*/
      strcpy(remainin g,src + find_len); /*store left over string */
      strcpy(src,rep) ; /*make the replacement*/
      src += rep_len; /*move to end of replacement*/
      strcpy(src,rema ining); /*copy back the left over part*/
      }

      free(remaining) ;
      return count;
      }


      I know that this code is inefficient (it uses all the string
      library routines),
      I wanted to know how to improve this code. Can anyone help me ?
      I want to know how you would implement the same function
      I know that there are some Regex libraries to do this effectively.
      But why is such a common function not there in standard library ?


      Thanks for your time,
      Yugi

      Comment

      • Chris Dollin

        #4
        Re: string search and replace

        int main(void) wrote:

        Sending the same message three times does not endear you to us.
        Sending the same message thrre times does not endear you to us.
        Sending the same message three times does not endeer you to us.
        But why is such a common function not there in standard library ?
        Likely:

        Because search-and-replace may need to expand the target string,
        and there isn't an obvious single best way to do this.

        (And because there wasn't one commonly implemented when the first
        standard was produced.)

        --
        Chris "Essen -8 and counting" Dollin
        "A facility for quotation covers the absence of original thought." /Gaudy Night/

        Comment

        • int main(void)

          #5
          Re: string search and replace


          Chris Dollin wrote:
          int main(void) wrote:
          >
          Sending the same message three times does not endear you to us.
          Sending the same message thrre times does not endear you to us.
          Sending the same message three times does not endeer you to us.
          My apologies. I sent the second time because layout of the code
          after
          posting got srambled somehow.
          I dont know why it got posted the third time.
          I'm using google interface.
          >
          But why is such a common function not there in standard library ?
          >
          Likely:
          >
          Because search-and-replace may need to expand the target string,
          and there isn't an obvious single best way to do this.
          >
          (And because there wasn't one commonly implemented when the first
          standard was produced.)
          Thanks for that point.


          Thanks for your time,
          Yugi.

          Comment

          • CBFalconer

            #6
            Re: string search and replace

            "int main(void)" wrote:
            Chris Dollin wrote:
            >int main(void) wrote:
            >>
            .... snip about string search and replace ...
            >>
            >>But why is such a common function not there in standard library ?
            >>
            >Likely:
            >>
            >Because search-and-replace may need to expand the target string,
            >and there isn't an obvious single best way to do this.
            >>
            >(And because there wasn't one commonly implemented when the first
            > standard was produced.)
            >
            Thanks for that point.
            And because the function is rarely needed. It may be useful in
            replacing strings during a file copy operation, which is a
            different matter. It might be instructive to examine how
            identifiers are replaced in id2id, for which see id2id-20.zip at:

            <http://cbfalconer.home .att.net/download/>

            --
            Some informative links:
            <news:news.anno unce.newusers
            <http://www.geocities.c om/nnqweb/>
            <http://www.catb.org/~esr/faqs/smart-questions.html>
            <http://www.caliburn.nl/topposting.html >
            <http://www.netmeister. org/news/learn2quote.htm l>
            <http://cfaj.freeshell. org/google/>


            Comment

            Working...