Pregunta

Tengo un problema que sscanf resuelve (extrayendo cosas de una cadena). Sin embargo, no me gusta sscanf ya que no es de tipo seguro y es viejo y horrible. Quiero ser inteligente y usar algunas partes más modernas de la biblioteca estándar de C ++. ¿Qué debo usar en su lugar?

¿Fue útil?

Solución

Pruebe std :: stringstream :

#include <sstream>

...

std::stringstream s("123 456 789");
int a, b, c;
s >> a >> b >> c;

Otros consejos

Para la mayoría de los trabajos, las transmisiones estándar hacen el trabajo perfectamente,

std::string data = "AraK 22 4.0";
std::stringstream convertor(data);
std::string name;
int age;
double gpa;

convertor >> name >> age >> gpa;

if(convertor.fail() == true)
{
    // if the data string is not well-formatted do what ever you want here
}

Si necesita herramientas más potentes para un análisis más complejo, entonces podría considerar Regex o incluso Spirit from Boost.

Si incluye sstream , tendrá acceso a las clases de secuencia de cadena que proporcionan secuencias para cadenas, que es lo que necesita. Roguewave tiene algunos buenos ejemplos sobre cómo usarlo. .

Si realmente no quieres usar transmisiones (es bueno debido a la legibilidad), puedes usar StringPrintf.

Puede encontrar su implementación en Folly:

https://github.com/facebook/folly/ blob / master / folly / String.h # L165

fgets o strtol

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top