Frage

Ich habe ein Problem, das löst (Extrahieren Dinge aus einem String) sscanf. Ich mag sscanf allerdings nicht, da es nicht typsicher und ist alt und schrecklich. Ich will klug sein und einige modernere Teile der C ++ Standardbibliothek zu verwenden. Was soll ich stattdessen?

War es hilfreich?

Lösung

Versuchen Sie std::stringstream :

#include <sstream>

...

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

Andere Tipps

Für die meisten Jobs Standard-Streams den Job perfekt,

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
}

Wenn Sie mehr leistungsfähige Werkzeuge für komplexere Analyse benötigen, dann könnte man Regex oder sogar Geist von Boost-betrachten.

Wenn Sie sstream schließen Sie den Zugriff auf die string Klassen, die Ströme für Streicher liefern, das ist, was Sie brauchen. RogueWave hat einige gute Beispiele dafür, wie es zu benutzen .

Wenn Sie wirklich nicht-Streams verwenden wollen (es ist gut, weil die Lesbarkeit), können Sie StringPrintf.

Sie können ihre Umsetzung in Folly finden:

https://github.com/facebook/folly/ Blob / Master / Torheit / String.h # L165

oder fgets strtol

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top