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

如何解析C中几乎定义的字符串?,c,scanf,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 N 012:34:35 W , 09:22:18 N

我有一个字符串要解析。 该字符串具有几乎定义的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 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
会更简单,因为您根本不必关心前导或尾随空格


至于小数点,如果以浮点形式读取,则可以同时读取
“18”
“18.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", ...);

谢谢你的帮助和想法

分享你的研究成果对每个人都有帮助。告诉我们您尝试了什么,以及为什么它不能满足您的需求。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参见从定义语法开始。然后为它构建一个解析器。第二部分可以使用库。(在C++中,我可能会鼓起勇气去提升精神)。在C.,处理字符串总是很混乱的,你能使用不同的语言吗?如果没有,或者按照@Bathsheba的建议使用解析器,或者如果语法足够简单,您可以逐个字符地处理字符串并手动构建值。另一种方法可能是预处理字符串以获得更容易解析的内容(例如,去除不必要的空白),然后为“规范化”定义语法字符串。不需要两个
sscanf
s。您只需使用
sscanf(gps_字符串,“%d:%d:%f%c%d:%d:%f%c,%d:%d:%f%c%d:%d:%f%c%d:%d:%f%c”、…)