我想用*
替换字符串中的字符串,使用此代码替换he
中ld
和helloworld
之间的所有内容:
#include <string>
#include <iostream>
int main()
{
const std::string msg = "helloworld";
const std::string from = "he";
const std::string to = "ld";
std::string s = msg;
std::size_t startpos = s.find(from);
std::size_t endpos = s.find(to);
unsigned int l = endpos-startpos-2;
s.replace(startpos+2, endpos, l, '*');
std::cout << s;
}
我得到的输出是He*****
,但我希望并期望He*****ld
。
我出了什么问题?
答案 0 :(得分:1)
您正在替换索引2之后的所有字符。计算索引并仅替换所需的范围。
试试这个:
#include <iostream>
#include <string>
int main ()
{
//this one for replace
string str="Hello World";
// replace string added to this one
string str2=str;
// You can use string position.
str2.replace(2,6,"******");
cout << str2 << '\n';
return 0;
}
有几种方法可以做到这一点。这是一种简单的方法。
更新(添加您的代码后):
变化:
unsigned int l=endpos-startpos-2;
s.replace(startpos+2,endpos,l,'*');
要:
unsigned int l=endpos-3;
s.replace(startpos+2,l,l,'*');
因为您的endpos
商店位置为d
。您需要在3
之前减去endpos
,然后l
变量值变为7
。之后在replace()
中将第二个参数更改为l
。
详细了解replace()。