所以这是我所指的代码行:
x.insert("a", "hello");
我试图在字符串中的每个“a”之后插入字符串“hello”。是否可以使用该insert
功能执行此操作?
在此评论之后,您可以在(非无限)循环中执行此操作:
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");
用插入功能不能做到这一点吗?
没错,你不能通过一次调用来做到这一点,insert()
因为std::string
没有具有insert()
这些语义的函数。
你想要做的是a
通过使用std::string::find 找到位置,然后调用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
就是你所追求的。