有没有办法把字符串放在`string.insert(“”,“”)`函数中?

时间:2013-01-05 09:01:23

标签: c++

所以这是我所指的代码行:

x.insert("a", "hello");

我正在尝试在字符串中的每个“a”之后插入字符串“hello”。是否可以使用insert函数执行此操作?

3 个答案:

答案 0 :(得分:2)

  

是否无法使用插入功能执行此操作?

这是正确的,只有一次调用insert()就无法执行此操作,因为std::string没有insert()函数具有这些语义。

答案 1 :(得分:2)

关注this comment,以下是在非(无限)循环中执行此操作的方法:

void insert_after_each(std::string& s, const std::string& target, const std::string& to_insert)
{
    for (std::string::size_type i = s.find(target);
        i != std::string::npos;
        i = s.find(target, i + target.size() + to_insert.size()))
    {
        s.insert(i + target.size(), to_insert);
    }
}

这会在target字符串后面(我称之为)插入文本并跳过目标文本(" a")和插入的文本(" hello")在每次迭代中。

样本用法:

std::string s = "A cat sat on a mat";
insert_after_each(s, "a", "hello");
assert(s == "A cahellot sahellot on ahello mahellot");

答案 2 :(得分:1)

您要做的是使用std::string::find找到a的位置,然后调用std::string::insert将字符串插入正确的位置。例如:

C ++ 11

 auto pos = x.find("a"); 
 x.insert(pos, "app"); 

C ++ 03:

  std::string b(x);
  int n = 0;
  for(std::string::iterator iter = x.begin(); iter!=x.end(); ++iter)
  {
    if ((*iter) == 'a')
    {
      int pos = rep.size()* n + distance(x.begin(), iter);
      cout << distance(x.begin(), iter) << " " << rep.size() << endl;
      b.insert(pos,"app");
      n++;
    }    
  }

现在字符串b就是你想要的。