【发布时间】:2019-04-18 07:39:47
【问题描述】:
我想在 Windows 下使用迭代器在 C++ 中进行一些字符串替换。 这是代码:
#include <stdio.h>
#include <iostream>
#include <string>
#include <iterator>
size_t iterator_to_size_t(std::string &string, std::string::iterator it)
{
size_t pos;
pos = std::distance(string.begin(), it);
return pos;
}
int main()
{
std::string text = "TTTTbcdefghijklmnopqrstuvwxyz";
std::string findtext = "TTTT";
std::string replacementtext = "123456";
for (std::string::iterator it = text.begin(); it!=text.end(); ++it)
{
size_t z = iterator_to_int(text, it);
if (text.compare(z, findtext.length(), findtext) == 0)
{
text.replace(z, findtext.length(), replacementtext);
}
}
return 0;
}
string::replace 方法显然使迭代器无效。我收到一条错误消息说。我试图将 string::replace 的返回值分配给迭代器,以获取新的有效迭代器,但返回值似乎不兼容。
如何在此处获得有效的迭代器,还是必须使用索引而不是迭代器?
【问题讨论】:
-
这并没有解决问题,而是养成使用有意义的值初始化对象的习惯,而不是默认初始化它们并立即分配新值。即把
size_t pos; pos = ...;改成size_t pos = ...;。
标签: c++ string replace iterator invalidation