如何在 C 中解析几乎定义的字符串?

How to parse almost-defined string in C?

我有一个字符串要解析。 该字符串具有几乎已定义的格式和 GPS 坐标。 我要获取坐标。

有时我会这样:

09:24:29 N 012:34:35 W, 09:22:18 N 012:33:55 W

但有时我会有多余的空格:

09:24:29 N 012:34:35 W , 09:22:18 N 012:33:55 W

但有时我没有空格:

09:24:29 N 012:34:35 W,09:22:18 N 012:33:55 W

但有时我有小数:

09:24:29.3 N 012:34:35.2 W, 09:22:18.1 N 012:33:55.6 W

所以我的问题是: 在 C 中读取这些 GPS 坐标的最可靠和便携的方法是什么?

我首先从 sscanf 开始,但是我有很多关于额外(或没有)空格和小数点的问题。

我建议你先用逗号拆分成多个字符串,然后使用 sscanf 会更简单,因为你根本不必关心前导或尾随 space.

至于小数点,如果你读成浮点数,那么"18""18.1"都可以读。但是,您可能需要了解一些 the problems with floating point data on binary computers.

谢谢 Joachim,使用浮动是个好主意。

这应该有效:

sscanf( gps_string, "%d:%d:%f %c %d:%d:%f %c", ...);

sscanf( strchr(gps_string, ',')+1, "%d:%d:%f %c %d:%d:%f %c", ...);

感谢您的帮助和想法!