Pergunta

Eu tenho um problema que resolve sscanf (extrair as coisas de uma string). Eu não gosto de sscanf embora desde não é tipo seguro e é velho e horrível. Eu quero ser inteligente e usar algumas partes mais modernas da biblioteca padrão do C ++. O que devo usar em vez disso?

Foi útil?

Solução

Tente std::stringstream :

#include <sstream>

...

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

Outras dicas

Para a maioria dos trabalhos fluxos padrão fazer o trabalho perfeitamente,

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 você precisa de ferramentas mais poderosas para análise mais complexa, então você poderia considerar Regex ou mesmo Espírito de Boost.

Se você incluir sstream você terá acesso às classes stringstream que fornecem fluxos de cordas, que é o que você precisa. Roguewave tem algumas boas exemplos sobre como usá-lo .

Se você realmente quer para não streams de uso (é bom por causa da legibilidade), você pode usar StringPrintf.

Você pode encontrar a sua implementação em Folly:

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

fgets ou strtol

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top