Das Parsen von durch Leerzeichen getrennten Floats kann eine zeitaufwändige Aufgabe sein, insbesondere wenn Sie mit großen Dateien arbeiten. Herkömmliche Methoden wie die Verwendung von Standard-C-Streams können langsam sein. In diesem Artikel werden mehrere effiziente Methoden zum Parsen von Floats in C untersucht.
Boost Spirit ist eine leistungsstarke C-Bibliothek, die erweiterte Parsing-Funktionen bietet. Trotz seiner anfänglichen Lernkurve bietet Spirit eine schnelle und zuverlässige Analyse. So verwenden Sie es:
#include <boost/spirit/include/qi.hpp> namespace qi = boost::spirit::qi; int main() { std::string line = "134.32 3545.87 3425"; double x, y, z; auto it = line.begin(); bool success = qi::phrase_parse(it, line.end(), qi::double_ >> qi::double_ >> qi::double_, qi::blank, data); if (success) { std::cout << "Parsed values: " << x << " " << y << " " << z << std::endl; } return 0; }
Speicherzugeordnete Dateien bieten eine schnellere Möglichkeit, Dateien ohne den Mehraufwand herkömmlicher E/A-Vorgänge in den Speicher einzulesen. Dies kann das Parsen erheblich beschleunigen:
#include <iostream> #include <fstream> #include <sys/stat.h> #include <sys/mman.h> int main() { std::ifstream file("data.txt"); struct stat statbuf; fstat(file.fileno(), &statbuf); // Memory-map the file char* data = static_cast<char*>(mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED, file.fileno(), 0)); // Iterate through the data to parse floats for (char* ptr = data; ptr < data + statbuf.st_size;) { double x, y, z; ptr = std::sscanf(ptr, "%f %f %f", &x, &y, &z); // Parse the float values and perform desired operations } // Unmap the file munmap(data, statbuf.st_size); return 0; }
Verschiedene Parsing-Methoden wurden einem Benchmarking unterzogen, um ihre Geschwindigkeitsunterschiede zu demonstrieren. Boost Spirit schnitt am schnellsten ab, gefolgt vom Memory-Mapping-File-Ansatz und den Standard-C-Streams. Die genaue Leistung kann je nach Größe und Komplexität der Daten variieren.
Das Parsen von durch Leerzeichen getrennten Floats in C kann mit verschiedenen Techniken optimiert werden. Boost Spirit bietet die höchste Leistung, erfordert jedoch ein besseres Verständnis seiner Parsing-Mechanismen. Speicherabgebildete Dateien bieten einen Mittelweg, da sie das Parsen beschleunigen und gleichzeitig die Einfachheit des Codes beibehalten. Herkömmliche C-Streams bleiben eine praktikable Option, wenn auch langsamer in der Berechnung.
Das obige ist der detaillierte Inhalt vonWas sind die schnellsten Methoden zum Parsen von durch Leerzeichen getrennten Gleitkommazahlen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!