Home     |     .Net Programming    |     cSharp Home    |     Sql Server Home    |     Javascript / Client Side Development     |     Ajax Programming

Ruby on Rails Development     |     Perl Programming     |     C Programming Language     |     C++ Programming     |     IT Jobs

Python Programming Language     |     Laptop Suggestions?    |     TCL Scripting     |     Fortran Programming     |     Scheme Programming Language


 
 
Cervo Technologies
The Right Source to Outsource

MS Dynamics CRM 3.0

C++ Programming

how can I replace a substring in a string


Hi,

If I have a string like this:
char buff[10];
buff[0] ='h';
buff[1] ='e';
buff[2] ='l';
buff[3] ='l';
buff[4] ='o';

string s(buff);

How can i replace 'll' with 'abc'
and what if I replace 'll' with 'a', will the 'o' move up by 1 index?

Thank you.

silverburgh.me@gmail.com skrev:

> Hi,

> If I have a string like this:
> char buff[10];
> buff[0] ='h';
> buff[1] ='e';
> buff[2] ='l';
> buff[3] ='l';
> buff[4] ='o';

buff[5] = 0;

> string s(buff);

> How can i replace 'll' with 'abc'
> and what if I replace 'll' with 'a', will the 'o' move up by 1 index?

replace(s, "ll", "abc");

void replace(std::string &target, std::string &that, std::string &with) {
   std::string::size_type where = target.find(that);
   if(where != std::string::npos) {
     target.replace(target.begin() + where,
                    target.begin() + where + that.size(),
                    with.begin(),
                    with.end());
   }

}

--
OU
On May 30, 10:04 am, "silverburgh.me@gmail.com"
<silverburgh.me@gmail.com> wrote:
> Hi,

> If I have a string like this:
> char buff[10];
> buff[0] ='h';
> buff[1] ='e';
> buff[2] ='l';
> buff[3] ='l';
> buff[4] ='o';

You need to insert a null character at postion 5.

> string s(buff);

> How can i replace 'll' with 'abc'

s.replace(2,2,"abc");

Here are all the string class member functions:

http://cppreference.com/cppstring/index.html

On Wed, 30 May 2007 19:30:52 +0200, Obnoxious User wrote:

[...]

>void replace(std::string &target, std::string &that, std::string &with) {

const correctness?

--
Roland Pibinger
"The best software is simple, elegant, and full of drama" - Grady Booch

Roland Pibinger skrev:

> On Wed, 30 May 2007 19:30:52 +0200, Obnoxious User wrote:
> [...]
>> void replace(std::string &target, std::string &that, std::string &with) {

> const correctness?

void replace(std::string       & target,
              std::string const & that,
              std::string const & with);

--
OU

<silverburgh.me@gmail.com> wrote in message news:1180544654.936438.32590@u30g2000hsc.googlegroups.com...
> Hi,

> If I have a string like this:
> char buff[10];
> buff[0] ='h';
> buff[1] ='e';
> buff[2] ='l';
> buff[3] ='l';
> buff[4] ='o';

Triply wrong:
1. Firstly, null-terminated strings need to be, well, null-terminated.
   So you'd need to set:
      buff[5] = '\0';
2. Why not just initialize the buffer to the string?
   char buff[10] = "hello";
3. Why use a char[] buffer at all?  Just do this:
      std::string MyString ("hello");

> string s(buff);

std::string

> How can i replace 'll' with 'abc'

Like so (tested, working program; compile this for demo):

#include <iostream>
#include <string>
int main (void)
{
   std::string S ("hello");
   S.replace(S.find("ll"), 2, "abc"); // replace 2 chars at "ll" by "abc"
   std::cout << S << std::endl;
   return 0;

}
> and what if I replace 'll' with 'a', will the 'o' move up by 1 index?

It decrements by one, from 4 to 3.

> Thank you.

You're welcome.

--
Cheers,
Robbie Hatley
lone wolf aatt well dott com
triple-dubya dott Tustin Free Zone dott org

"Obnoxious User" <O@127.0.0.1> wrote in message

 news:465db294$0$20045$88260bb3@alt.teranews.com...

> replace(s, "ll", "abc");

> void replace(std::string &target, std::string &that, std::string &with) {
>    std::string::size_type where = target.find(that);
>    if(where != std::string::npos) {
>      target.replace(target.begin() + where,
>                     target.begin() + where + that.size(),
>                     with.begin(),
>                     with.end());
>    }
> }

Ewww.  I could replace all of the above with just this:

   s.replace(s.find("ll"), 2, "abc");

or more generically:

   s.replace(s.find(target), target_size, replacement);

Far more convenient, and far less prone to error.  "find" and "replace" are
already built into the std::string class, so might as well use them.

--
Cheers,
Robbie Hatley
lone wolf aatt well dott com
triple-dubya dott Tustin Free Zone dott org

Add to del.icio.us | Digg this | Stumble it | Powered by Megasolutions Inc