3

これが私が参照している私のコードの行です:

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

文字列の各「a」の後に文字列「hello」を挿入しようとしています。insert関数でこれを行うことは可能ですか?

4

3 に答える 3

2

挿入機能でこれを行うことはできませんか?

そうです、これらのセマンティクスを持つ関数がないためinsert()、への1回の呼び出しでこれを行うことはできません。std::stringinsert()

于 2013-01-05T09:04:33.567 に答える
2

このコメントに続いて、(無限ではない)ループでこれを行う方法を次に示します。

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");
于 2013-01-05T09:54:26.790 に答える
1

あなたがしたいことは、std::string::findaを使用しての位置を見つけてから、 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はあなたが求めているものです。

于 2013-01-05T09:18:26.557 に答える