Подтвердить что ты не робот

Получение подстроки `std::string` между двумя итераторами

У меня есть программа, которая, как ожидается, возьмет в качестве ввода несколько опций, чтобы указать вероятности в форме (p1, p2, p3,...). Таким образом, использование командной строки будет буквально:

./myprog -dist (0.20, 0.40, 0.40)

Я хочу анализировать списки, подобные этому в С++, и в настоящее время я пытаюсь сделать это с помощью итераторов для типа std::string и функции split, предоставляемой Boost.

// Assume stuff up here is OK
std::vector<string> dist_strs; // Will hold the stuff that is split by boost.
std::string tmp1(argv[k+1]);   // Assign the parentheses enclosed list into this std::string.

// Do some error checking here to make sure tmp1 is valid.

boost::split(dist_strs,  <what to put here?>   , boost::is_any_of(", "));

Примечание над частью <what to put here?>. Так как мне нужно игнорировать начало и конец круглых скобок, я хочу сделать что-то вроде

tmp1.substr( ++tmp1.begin(), --tmp1.end() )

но это не похоже на то, что substr работает таким образом, и я не могу найти функцию в документации, которая работает для этого.

Одна из моих идей заключалась в том, чтобы сделать арифметику итератора, если это разрешено, и использовать substr для вызова

tmp1.substr( ++tmp1.begin(), (--tmp1.end()) - (++tmp1.begin()) )

но я не был уверен, разрешено ли это, или если это разумный способ сделать это. Если это недействительный подход, что лучше?... Большое спасибо заранее.

4b9b3361

Ответ 1

std::string конструктор должен предоставить необходимую функциональность.

std::string(tmp1.begin() + 1, tmp1.end() - 1)