我使用过C#和Java,所以我习惯打开一个输入文件并读取文件流结尾,同时在每一行使用某种.split
并将分隔符作为选项卡,逗号等获取单个值或提取每个值的特定字符数。我最近开始学习C ++课程并且到目前为止没有任何问题,因为他们主要使用控制台输入/输出,但我发现从文件中提取数据相当困难:
struct Student{
string _fullName[50];
int _grade;
float _avg;
};
int main(){
Student students[30];
ifstream inputFile;
inputFile.open("file.txt");
if (inputFile.is_open()){
int i = 0;
char data[100];
while (inputFile.getline(data, 100)){
//need to split the data by \t and properly convert it into an int/string/float where needed
}
}
system("pause");
return 0;
}
我考虑将getline分隔符更改为\ t并以这种方式设置每个值(即,在设置了3个属性后将i重置为0),但如果其中一行缺少值,则无效。这个小任务无关紧要,但我希望能够正确有效地完成这项工作。提取每行数据并将其正确解析为适当的数据类型的最有效方法是什么?
注意:此时我不应该使用向量或算法。
答案 0 :(得分:1)
我建议stringstream。你已经在使用标准流了,所以我不认为它会偏离主题(如果它看起来像是你应该编写自己的字符串分割器)。 stringstream
与ifstream
完全相同,但它从内存缓冲区而不是文件中读取:
#include <sstream>
// ...
char data[100];
while (inputFile.getline(data, 100)){
std::stringstream lineStream(data);
while (lineStream >> data) {
// now you have a token (space-delimeted) in 'data'
}
}
您还可以使用getline