gpt4 book ai didi

c - 如何在 C 中获取未格式化的可变长度字符串中的所有 float ?

转载 作者:行者123 更新时间:2023-11-30 20:31:19 25 4
gpt4 key购买 nike

假设我有一个包含一堆 float 的字符串,如下所示:

1.00 [6.50, 1.00, 0.50; 4.00, 1.50, 3.50; ...]

每个 float 在小数点右侧都有两位小数(因为我将 snprintf%.2f 说明符一起使用。我如何将每个 float 提取到 float 组?

这是我尝试获取前三个 float 的方法:

                const char *linkLabel = "1.00 [6.50, 1.00, 0.50; 4.00, 1.50, 3.50]"

float arr[3];
int i;
for (i = 0; i < 3; i++) {
sscanf(linkLabel, "%f", &arr[i]);
printf("%f\n", arr[i]);
}

但是,由于还有其他字符(空格、逗号、括号),并且 sscanf 需要字符串中固定数量的 float 来提取它们(在不知道有多少 float 的情况下无法提取所有 float ),我不知道如何正确地做到这一点。

感谢任何帮助,

维卡斯

最佳答案

您当前的实现不会在字符串中前进,它只是一遍又一遍地消耗相同的值。

您可以使用 sscanf 遍历字符串并使用任何“下一个 float ”与 %f 的组合(读 float ),%n (告诉我刚刚消耗了多少个字符),以及 sscanf 的结果打电话告诉你 float 是否真的被提取了。

例如:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main()
{
char str[] = "1.00 6.50, 1.00, 0.50; 4.00, 1.50, 3.50";

float value;
char *rp = str;
int n = 0;
while (*rp && sscanf(rp, "%f%n", &value, &n) == 1)
{
printf("read: %f\n", value);
rp += n; // HERE. adjust next read start point

// this just skips all decimals and non-digit characters
// until EOS or a decimal or digit is encountered.
while (*rp && *rp != '.' && !isdigit((unsigned char)*rp))
++rp;
}

return 0;
}

输出

read: 1.000000
read: 6.500000
read: 1.000000
read: 0.500000
read: 4.000000
read: 1.500000
read: 3.500000

我将每个读取值存储到动态数组中作为练习,但我确信很明显它是在每次成功提取后的循环中完成的。

关于c - 如何在 C 中获取未格式化的可变长度字符串中的所有 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51542815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com