2012-04-04 12 views
19

Mam program, który ma wziąć jako dane wejściowe kilka opcji do określenia prawdopodobieństwa w formularzu (p1, p2, p3, ...). Więc korzystanie z linii poleceń by dosłownie:Uzyskiwanie podciągu `std :: string` między dwoma iteratorami

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

chcę analizować list jak to w C++ i jestem obecnie próbuje zrobić z iteratorów dla typu std :: string oraz funkcję podziału dostarczonych przez impuls.

// 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(", ")); 

Uwaga powyżej części <what to put here?>. Ponieważ muszę ignorować początkowy i końcowy nawiasów, chcę zrobić coś podobnego

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

ale to nie wygląda substr działa w ten sposób, a ja nie mogę znaleźć funkcji w dokumentacji, która działa w tym celu .

Jeden pomysł miałam zrobić iterator arytmetyki, jeśli jest to dozwolone i używać substr zadzwonić

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

ale nie byłem pewien, czy to jest dozwolone, lub jeśli jest to rozsądny sposób Zrób to. Jeśli to nie jest prawidłowe podejście, co jest lepsze? ...Z góry bardzo dziękuję.

Odpowiedz

39
Konstruktor

std::string powinien zapewnić niezbędną funkcjonalność.

std::string(tmp1.begin() + 1, tmp1.end() - 1) 
Powiązane problemy