Domanda

Ho un problema che sscanf risolve (estraendo cose da una stringa). Sscanf non mi piace però dal momento che non è sicuro per i tipi ed è vecchio e orribile. Voglio essere intelligente e usare alcune parti più moderne della libreria standard C ++. Cosa dovrei usare invece?

È stato utile?

Soluzione

Prova std :: stringstream :

#include <sstream>

...

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

Altri suggerimenti

Per la maggior parte dei lavori i flussi standard eseguono perfettamente il lavoro,

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
}

Se hai bisogno di strumenti più potenti per analisi più complesse, allora potresti prendere in considerazione Regex o persino Spirit from Boost.

Se includi sstream avrai accesso alle classi stringstream che forniscono flussi per stringhe, che è ciò di cui hai bisogno. Roguewave ha alcuni buoni esempi su come usarlo .

Se vuoi davvero non usare i flussi (è buono a causa della leggibilità), puoi usare StringPrintf.

Puoi trovarne l'implementazione in Folly:

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

fgets o strtol

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top