Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > string search and replace

Reply
Thread Tools

string search and replace

 
 
int main(void)
Guest
Posts: n/a
 
      10-11-2006
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(src) + 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(remaining,src + find_len); /*store left over string
*/
strcpy(src,rep); /*make the
replacement */
src += rep_len; /*move to end of
replacement */
strcpy(src,remaining); /*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

 
Reply With Quote
 
 
 
 
int main(void)
Guest
Posts: n/a
 
      10-11-2006

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(src) + 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(remaining,src + find_len); /*store left over string
> */
> strcpy(src,rep); /*make the
> replacement */
> src += rep_len; /*move to end of
> replacement */
> strcpy(src,remaining); /*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(src) + 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(remaining,src + find_len); /*store left over string */
strcpy(src,rep); /*make the replacement*/
src += rep_len; /*move to end of replacement*/
strcpy(src,remaining); /*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

 
Reply With Quote
 
 
 
 
int main(void)
Guest
Posts: n/a
 
      10-11-2006

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(src) + 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(remaining,src + find_len); /*store left over string
> */
> strcpy(src,rep); /*make the
> replacement */
> src += rep_len; /*move to end of
> replacement */
> strcpy(src,remaining); /*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(src) + 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(remaining,src + find_len); /*store left over string */
strcpy(src,rep); /*make the replacement*/
src += rep_len; /*move to end of replacement*/
strcpy(src,remaining); /*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

 
Reply With Quote
 
Chris Dollin
Guest
Posts: n/a
 
      10-11-2006
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/

 
Reply With Quote
 
int main(void)
Guest
Posts: n/a
 
      10-11-2006

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.

 
Reply With Quote
 
CBFalconer
Guest
Posts: n/a
 
      10-11-2006
"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.announce.newusers
<http://www.geocities.com/nnqweb/>
<http://www.catb.org/~esr/faqs/smart-questions.html>
<http://www.caliburn.nl/topposting.html>
<http://www.netmeister.org/news/learn2quote.html>
<http://cfaj.freeshell.org/google/>


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Replace /n with a XHTML <br /> using string.replace Alun ASP .Net 3 02-18-2008 05:52 AM
how to make replace function replace globally in a string V S Rawat Javascript 5 07-03-2007 08:02 PM
simple string search and replace Kun Python 4 03-26-2006 04:15 AM
help with string replace - for doing selective replace Prasad S Javascript 2 08-27-2004 03:22 PM
string-search-and-replace function wanted Stefan Ram C Programming 11 03-04-2004 03:19 PM



Advertisments