2012-04-04 14 views
19

Ho un programma che dovrebbe prendere come input alcune opzioni per specificare le probabilità nel modulo (p1, p2, p3, ...). Quindi l'utilizzo della riga di comando sarebbe letteralmente:Ottenere una sottostringa di `std :: string` tra due iteratori

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

voglio analizzare gli elenchi di questo tipo in C++ e attualmente sto cercando di farlo con iteratori per il tipo std :: string e la funzione split fornito da 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(", ")); 

Nota sopra la parte <what to put here?>. Da quando ho bisogno di ignorare l'inizio e la parentesi finali, voglio fare qualcosa di simile

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

ma non sembra substr funziona in questo modo, e non riesco a trovare una funzione nella documentazione che lavora per fare questo .

Un'idea che avevo era di fare iteratore aritmetica, se questo è consentito, e utilizzare substr chiamare

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

ma non ero sicuro se questo è consentito, o se si tratta di un modo ragionevole per fallo. Se questo non è un approccio valido, qual è uno migliore? ...Molte grazie in anticipo.

risposta

39

Il costruttore di std::string deve fornire le funzionalità necessarie.

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