2012-04-04 8 views
19

Tengo un programa que se espera que tome como entrada algunas opciones para especificar probabilidades en el formulario (p1, p2, p3, ...). Por lo que el uso de la línea de comandos podría ser literalmente:Obtener una subcadena de `std :: string` entre dos iteradores

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

Quiero analizar las listas de este tipo en C++ y actualmente estoy tratando de hacerlo con iteradores para el tipo std :: string y la función de división proporcionada por 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 sobre la parte <what to put here?>. Desde que necesita para pasar por alto el principio y el paréntesis que termina, quiero hacer algo como

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

pero no se parece a substr funciona de esta manera, y no puedo encontrar una función en la documentación que trabaja para hacer esto .

Una idea que tenía era hacer aritmética iterador, si esto está permitido, y el uso de substr llamar

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

pero no estaba seguro de si esto es permitido, o si se trata de una forma razonable de hazlo. Si este no es un enfoque válido, ¿cuál es mejor? ...Muchas gracias de antemano.

Respuesta

39

El constructor std::string debe proporcionar la funcionalidad que necesita.

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