gpt4 book ai didi

将字符串从 .csv 文件转换为 double

转载 作者:行者123 更新时间:2023-11-30 16:22:42 27 4
gpt4 key购买 nike

将字符串转换为 double 时遇到问题。我尝试过使用 strtod,但效果相同。看起来这应该可以工作,但也许使用 strtok 与它有关。 data[i].calories 当然是 double 值。

data[i].calories = atof(strtok(NULL, ","));

它似乎为卡路里分配了一个非常大的正数或负数(双倍,这意味着它读取的值一定是错误的。

预期数据:

12cx7,23:55:00,->0.968900025,(this could also be a double),0,74,0,2,

它实际上得到了什么:

12cx7,23:55:00,->-537691972,0,0,74,0,2,

编辑:

我是个白痴,我把它显示为 INT PFFFFFFFFFFFFFFFF。

最佳答案

假设我们有这样的输入,

12cx7,23:55:00,0.968900025,,0,74,0,2,

我们愿意,

"Having trouble with the converting of strings to doubles."

这就是我们想要分离字母数字数据。然后剩下的整数和 float ,我们想以正确的格式打印,我会做如下的事情:

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

int isNumeric (const char * s)
{
if (s == NULL || *s == '\0' || isspace(*s)) {
return 0;
}
char * p;
strtod (s, &p);
return *p == '\0';
}

bool isInteger(double val)
{
int truncated = (int)val;
return (val == truncated);
}

int main() {
// If this is your input:
char input[100] = "12cx7,23:55:00,0.968900025,0,74,0,2,";
// Then step 1 -> we split the values
char *token = std::strtok(input, ",");
while (token != NULL) {
// Step 2 -> we check if the values in the string are numeric or otherwise
if (isNumeric(token)) {
// printf("%s\n", token);
char* endptr;
double v = strtod(token, &endptr);
// Step 3 -> we convert the strings containing no fractional parts to ints
if (isInteger(v)) {
int i = strtol(token, &endptr, 10);
printf("%d\n", i);
} else {
// Step 4 -> we print the remaining numeric-strings as floats
printf("%f\n", v);
}
}
else {
// What is not numeric, print as it is, like a string
printf("%s,",token);
}
token = std::strtok(NULL, ",");
}
}

对于 isInteger() 函数,我从 this 获取了想法/代码接受的答案。其余部分非常原创,可能可以改进/改进。

这会产生以下输出:

12cx7,23:55:00,0.968900,0,74,0,2,

这基本上就是我们想要的输出,除了一个非常重要的区别,即输入是整个单个字符串,而输出是 double / float 、整数和字符串,正确识别并以正确的格式打印。

编辑:

我不在这里进行错误处理。这段代码只是为了给OP提供一个概念验证。检查并控制从使用的 strtoX 函数返回的任何错误。

关于将字符串从 .csv 文件转换为 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340080/

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