공백으로 구분된 부동 소수점을 구문 분석하는 것은 특히 대용량 파일을 처리할 때 시간이 많이 걸리는 작업일 수 있습니다. 표준 C 스트림을 사용하는 것과 같은 기존 방법은 속도가 느릴 수 있습니다. 이 기사에서는 C에서 부동 소수점을 구문 분석하는 몇 가지 효율적인 방법을 살펴봅니다.
Boost Spirit은 고급 구문 분석 기능을 제공하는 강력한 C 라이브러리입니다. 초기 학습 곡선에도 불구하고 Spirit은 빠르고 안정적인 구문 분석을 제공합니다. 사용 방법은 다음과 같습니다.
#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; }
메모리 매핑 파일은 기존 I/O 작업의 오버헤드 없이 파일을 메모리로 읽어오는 더 빠른 방법을 제공합니다. 이렇게 하면 구문 분석 속도가 크게 향상될 수 있습니다.
#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; }
다양한 구문 분석 방법을 벤치마킹하여 속도 차이를 입증했습니다. Boost Spirit이 가장 빠른 것으로 나타났고, 메모리 매핑 파일 접근 방식과 표준 C 스트림이 그 뒤를 이었습니다. 정확한 성능은 데이터의 크기와 복잡성에 따라 달라질 수 있습니다.
C에서 공백으로 구분된 부동 소수점 구문 분석은 다양한 기술을 사용하여 최적화할 수 있습니다. Boost Spirit은 최고의 성능을 제공하지만 구문 분석 메커니즘에 대한 더 많은 이해가 필요합니다. 메모리 매핑된 파일은 코드 단순성을 유지하면서 구문 분석 속도를 높이는 중간 지점을 제공합니다. 기존 C 스트림은 계산 속도가 느리지만 여전히 실행 가능한 옵션으로 남아 있습니다.
위 내용은 C에서 공백으로 구분된 부동 소수점을 구문 분석하는 가장 빠른 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!