Я нахожусь в точке моего кода, где у меня есть итераторы для двух местоположений в строке, между которыми мне нужно вернуть подстроку. Я вижу, что функция подстроки (http://www.cplusplus.com/reference/string/string/substr/) занимает только позиции size_t в качестве параметров. Мне пришлось бы многое изменить в моем коде, если бы я вернулся и отслеживал позиции как типы size_t, а не итераторы.
Есть идеи? Я просмотрел все строковые функции (http://www.cplusplus.com/reference/string/string/) и не вижу вопиющих решений.
Чтобы указать некоторый контекст, моя строка
eq
итераторы
FRFP
а также
NLFP
(где eq означает, что моя строка является уравнением, FRFP является первым правым обратным направлением, а NLFP представляет собой следующую левую противоположность). Мне нужна строка, которая находится между FRFP и NLFP, не включительно.
Предположим, что у вас есть два итератора, указывающих внутри строки. Затем, чтобы извлечь подстроку, вы можете написать
std::string MySubstring( Iterator1, Iterator2 );
Два способа сделать это:
#include <iostream>
#include <iterator>
int main()
{
std::string s = "((hi there))";
auto lp = s.begin() + 1;
auto rp = s.end() - 1;
std::cout << std::string(lp + 1, rp - 1) << "\n";
int beg_off = std::distance(s.begin(), lp) + 1;
int end_off = std::distance(lp, rp) - beg_off;
std::cout << s.substr(beg_off, end_off);
}
std::string(it1+1, it2-1)
, если итераторы указывают на круглые скобки. Посмотрите на последний конструктор для строки.