Я хочу сделать некоторую замену строк в C ++ под Windows, используя итераторы.
Это код:
#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 итератору, чтобы получить новый действительный итератор, но возвращаемое значение, по-видимому, несовместимо.
Как мне получить действительный итератор здесь или мне нужно использовать индексы вместо итераторов?