我现在正在使用单独的文本文件分配每个变量。我有这种形式的东西:
double ft_means[3];
double ft_std_dev[3];
inputFile.open("mean.txt");
if (!inputFile)
cout<< "Error";
count=0;
while(!inputFile.eof())
{
inputFile >> ft_means[count];
count++;
}
count= 0;
ifstream inputFile2;
inputFile2.open("std_dev.txt");
if (!inputFile2)
cout<< "Error";
count=0;
while(!inputFile2.eof())
{
inputFile2 >> ft_std_dev[count];
count++;
}
char line[20];
std::string words[405];
int i=0;
std::ifstream myfile ("features.txt");
if (myfile.is_open())
{
for(i=0; i<3; ++i) {
myfile.getline(line, 3);
words[i]=line;
strcpy(line, "");
}
myfile.close();
}
我当前的文本文件具有以下格式:
Mean.txt:
11
23
36
std_dev.txt:
34
42
22
features.txt
abc[0]
abc[1]
abc[3]
abc[4]*abc[5]
我的问题是如何为同一文本文件中的每个变量分配相应的行。我不再需要单独的文本文件,而只需要一个包含所有行的文本文件,然后将每个变量分配给文本文件的相应行。 例如,新的文本文件格式可以是以下形式:
11
23
36
34
42
22
abc[0]
abc[1]
abc[3]
abc[4]*abc[5]
答案 0 :(得分:1)
假设文件中具有不同的块,则可以使用以下结构:
std::string line;
// output variables
std::vector<double> means;
std::vector<double> stddevs;
std::vector<std::string> expressions;
// part one: means
while (std::getline(inputFile, line) && !line.empty()) {
double mean;
std::istringstream(line) >> mean;
means.push_back(mean);
}
// part two: stddevs
while (std::getline(inputFile, line) && !line.empty()) {
double stddev;
std::istringstream(line) >> stddev;
stddevs.push_back(stddev);
}
// part three: expressions
while (std::getline(inputFile, line) && !line.empty()) {
expressions.push_back(line);
}
每个while
循环中的条件都会检查您是否尚未到达文件末尾,以及是否刚刚读取了空行。
std::istringstream
对象将字符串转换为流,因此您可以在其上使用常规提取运算符。
您可以添加一些using
语句以将各种类纳入范围,以便摆脱一些std::
杂音,但这取决于您。
答案 1 :(得分:0)