【发布时间】:2018-03-27 06:26:23
【问题描述】:
我有一个问题。如果我想在 string 中提取多个 float 数字,我应该怎么做?
我知道有像strtof 这样的函数,我可以通过它提取数字。问题是如果字符串中存在多个数字怎么办?
我只是想要并且我知道唯一需要的是找到数字后指向下一个字符的指针。然后继续搜索,直到找到\n,但是如何?
示例:
假设我有一份关于一年中某些城镇降雨量的报告,我想
提取每个城镇的降雨量(当它到达该城镇的\nreport 时)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char* data = "Rome:Jan 81.2,Feb 63.2,Mar 70.3,Apr 55.7,May 53.0,Jun 36.4,Jul 17.5,Aug 27.5,Sep 60.9,Oct 117.7,Nov 111.0,Dec 97.9\n"
"London:Jan 48.0,Feb 38.9,Mar 39.9,Apr 42.2,May 47.3,Jun 52.1,Jul 59.5,Aug 57.2,Sep 55.4,Oct 62.0,Nov 59.0,Dec 52.9\n"
"Paris:Jan 182.3,Feb 120.6,Mar 158.1,Apr 204.9,May 323.1,Jun 300.5,Jul 236.8,Aug 192.9,Sep 66.3,Oct 63.3,Nov 83.2,Dec 154.7\n"
"NY:Jan 108.7,Feb 101.8,Mar 131.9,Apr 93.5,May 98.8,Jun 93.6,Jul 102.2,Aug 131.8,Sep 92.0,Oct 82.3,Nov 107.8,Dec 94.2\n"
"Vancouver:Jan 145.7,Feb 121.4,Mar 102.3,Apr 69.2,May 55.8,Jun 47.1,Jul 31.3,Aug 37.0,Sep 59.6,Oct 116.3,Nov 154.6,Dec 171.5\n"
"Sydney:Jan 103.4,Feb 111.0,Mar 131.3,Apr 129.7,May 123.0,Jun 129.2,Jul 102.8,Aug 80.3,Sep 69.3,Oct 82.6,Nov 81.4,Dec 78.2\n"
"Bangkok:Jan 10.6,Feb 28.2,Mar 30.7,Apr 71.8,May 189.4,Jun 151.7,Jul 158.2,Aug 187.0,Sep 319.9,Oct 230.8,Nov 57.3,Dec 9.4\n"
"Tokyo:Jan 49.9,Feb 71.5,Mar 106.4,Apr 129.2,May 144.0,Jun 176.0,Jul 135.6,Aug 148.5,Sep 216.4,Oct 194.1,Nov 95.6,Dec 54.4\n"
"Beijing:Jan 3.9,Feb 4.7,Mar 8.2,Apr 18.4,May 33.0,Jun 78.1,Jul 224.3,Aug 170.0,Sep 58.4,Oct 18.0,Nov 9.3,Dec 2.7\n"
"Lima:Jan 1.2,Feb 0.9,Mar 0.7,Apr 0.4,May 0.6,Jun 1.8,Jul 4.4,Aug 3.1,Sep 3.3,Oct 1.7,Nov 0.5,Dec 0.7";
const char* towns[14] = {"Rome", "London", "Paris", "NY", "Vancouver", "Sydney", "Bangkok", "Tokyo",
"Beijing", "Lima", "Montevideo", "Caracas", "Madrid", "Berlin"};
size_t i = 0;
float nums[12];
char *ch_ptr = strstr(data,towns[0]); //pointing to first character
const char *stop ="\n";
while((ch_ptr++) != stop)
{
nums[i] = strtof(); ///How should I do it ????
i++;
}
return 0;
}
【问题讨论】:
-
如果你阅读manpage for strtod,你会发现它有两个参数,第二个可以用来继续扫描输入。 (我建议
strtod而不是strtof,因为你应该总是使用double,而不是float,除非你有一个不使用的 giid rwason(如果你必须问什么是一个很好的理由,你没有一)。 -
不相关,但您的
while循环中的条件与您认为的不同。 -
@JimLewis 我只想要并且我知道唯一需要的是找到数字后指向下一个字符的指针。然后继续搜索直到到达
\n -
@P.Bn 除了你继续搜索直到它到达
stop中的\n,它不会因为那完全是其他地方。