谁能帮我解决以下问题:
我有一个只有一行的文件,其中包含以下由空格分隔的组
- 实数
- 整数
- 十六进制数
- 字符'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/