Один из подходов к синтаксическому анализу lat / lon из строки - использование stringstream для последующего форматированного чтения строки в нужные вам компоненты.Хотя это немного жестко с точки зрения входного формата, если у вас фиксированный формат, он работает хорошо.
В следующем примере просто используется ваша строка test1
со строковым потоком для чтения обоих lat
и lon
как double
значения, пропуская промежуточный /N
, выделяя их как символы и позволяя >>
использовать начальные пробелы до lon
.(вы можете легко приспособиться к сохранению N
(или S
) и E
(или W
), предоставив две дополнительные символьные переменные и сохранив при необходимости).
Коротким примером будет:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main (void) {
double lat, lon;
string test1 = "57.4317/N 4.7892/E London Airport";
stringstream s (test1);
char c;
if ((s >> lat) && (s >> c) && (s >> c) && (s >> lon))
cout << "lat: " << lat << "\nlon: " << lon << '\n';
}
Пример использования / вывода
$ ./bin/ssparselatlon
lat: 57.4317
lon: 4.7892
Другой подход заключается в простом использовании указателя символа и литерала c_str()
из вашей строки для ходьбыуказатель на строку, вызывающий strtod
, когда встречается цифра, и использование параметра endptr
, чтобы пройти дальше значения и продолжить поиск следующей цифры.Вы можете сделать что-то похожее с циклом с автозапуском или итератором и stod
.Все зависит от того, насколько гибкой должна быть ваша процедура ввода.Если ваш формат ввода фиксирован, то сохранить его так же просто, как и любой другой.