how can I replace a substring in a string

S

silverburgh.meryl

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.
 
O

Obnoxious User

(e-mail address removed) 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());
}
}
 
N

Naresh Rautela

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.
 
R

Robbie Hatley

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.
 
R

Robbie Hatley

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,022
Latest member
MaybelleMa

Latest Threads

Top