如何从STRING中读取未知数量的浮点值

时间:2014-07-06 10:20:32

标签: c scanf

我有一个字符串,其浮点值的数量未知,由空格分隔。(类似这样): 12.55 54.11 -1.00000 2.222 ...... 现在我需要将所有这些值读入数组。 我该怎么做呢?我是否必须使用 sscanf

1 个答案:

答案 0 :(得分:1)

  

我必须使用sscanf吗?

不,你没必要,除非你喜欢使用它。我更喜欢使用strtof

无论您使用哪种函数,都需要使用一个循环来读取字符串中的值。由于项目数量未知,您可以扫描字符串两次 - 一次扫描您有多少项目,第二次扫描实际读取。由于字符串在内存中,因此循环中浪费的时间将对条目进行计数。

int cnt = 0;
char *str = "2.55 54.11 -1.00000 2.222";
char *ptr = str, *eptr;
do {
    strtof(ptr, &eptr);
    ptr = eptr;
    cnt++;
} while (*eptr);
printf("%d\n", cnt);
float *res = malloc(cnt*sizeof(float));
ptr = str;
for (int i = 0 ; i != cnt ; i++) {
    res[i] = strtof(ptr, &eptr);
    ptr = eptr;
}
for (int i = 0 ; i != cnt ; i++) {
    printf("%f\n", res[i]);
}

Demo on ideone.