gpt4 book ai didi

c - 从文件中存储多种类型的数据

转载 作者:太空宇宙 更新时间:2023-11-04 01:48:33 24 4
gpt4 key购买 nike

谁能帮我解决以下问题:

我有一个只有一行的文件,其中包含以下由空格分隔的组

  • 实数
  • 整数
  • 十六进制数
  • 字符'N'

这里有一些例子:

    0 0.3 -1 +3 0xc 'N'

2.12211 1 -100 'N' 0xac 'N'

基本上第一行可能包含实数、整数、十六进制数、字符'N',每组之间用空格分隔

有没有办法创建一个包含由空格分隔的元素(十六进制数也应转换为十进制数)的多种类型(在 C 中,而不是在 C++ 中)的 vector ?

第一个例子应该是

 V[0]=0
V[1]=0.3
V[2]=-1
V[3]=3
V[4]=12
v[5]='N'

第二个例子应该是

V[0]=2.12211   
V[1]=1
V[2]=-100
V[3]=3
V[4]='N'
v[5]=172
V[6]='N'

最佳答案

规则 #1:避免过早优化。

定义数据类型:

enum data_type {
data_type_integer = 0,
data_type_float,
data_type_char,
...
};

现在定义包含这些数据的结构:

struct data {
enum data_type data_type;
int data_integer;
float data_float;
char data_char;
};

当然这会浪费一些空间,但除非您编写数据库引擎或其他东西,否则请记住规则 #1。如果它真的困扰你,将数据(不是 data_type)打包到 union 中。但是如果你在 union 上犯了错误,它会咬你一口(因为编译器无法检查,例如,你存储了 char 并读取了 int)。

现在您有一个类型来存储各种数据类型。

要解析它,有多种方法。我建议将每个项目作为一个字符串读取,然后使用 sscanf 解析该字符串。之所以采用这种两步法,是因为您可以通过检查字符串内容来确定类型:如果包含“N”,则为“N”。如果它包含“e”、“E”或“.”它是 float 的,等等。

关于c - 从文件中存储多种类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48428395/

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