std :: string替换不保留结束?

时间:2017-05-25 08:23:22

标签: c++ string

我想用*替换字符串中的字符串,使用此代码替换heldhelloworld之间的所有内容:

#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。 我出了什么问题?

1 个答案:

答案 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()