Was sollte ich statt sscanf verwenden?
-
06-07-2019 - |
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?
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