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

时间:2015-06-09 09:32:02

标签: c scanf

我有一个要解析的字符串。 该字符串具有几乎定义的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开始,但是我有很多额外(或没有)空格和小数的问题。

2 个答案:

答案 0 :(得分:2)

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

对于小数点,如果你读为float,它将能够读取"18""18.1"。但是,您可能需要了解一些the problems with floating point data on binary computers

答案 1 :(得分:1)

感谢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", ...);

感谢您的帮助和想法!