伪代码:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
int main() {
string line;
double beta[250];
char Batob[250], eq[250];
ifstream myfile("iter1/HMMemit0.txt");
if (myfile.is_open())
{
int i = 0;
while (getline(myfile, line))
{
istringstream iss(line);
if (!(iss >> Batob[i] >> eq[i] >> beta[i])){ //it store only B in Batob[i], but i want to save B00 in Batob[i], = in eq[i], and 0.524671 in beta[250]
break;
}
i++;
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
我的数据是这样存储在HMMemint0中的
B00 = 0.524671
B01 = 0.001000
B02 = 0.001000
B10 = 0.001097
B11 = 0.001000
B12 = 0.001000
我想读取一行并将每个项保存在每个变量中,例如 B00 保存在 name[i] 中,0.001000 保存在 beta[i] 中。 然后,写成0.524671(B00的值) 0.001097(B10的值)这样的顺序
0.524671 0.001097
0.001000 0.001000
0.001000 0.001000
我该怎么做?请帮助我。
最佳答案
您有一个用于“BXX”的字符数组,而您需要的是字符串。基本上,您需要一个字符串数组,甚至 vector 。问题是只有“B”会从“BXX”读入您的第一个参数。
这段代码对我有用:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
int main() {
string line;
double beta[250];
string Batob[250];
char eq[250];
ifstream myfile("iter1/HMMemit0.txt");
if (myfile.is_open())
{
int i = 0;
while (getline(myfile, line))
{
istringstream iss(line);
iss >> Batob[i] >> eq[i] >> beta[i];
i++;
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
免责声明:我只是修复了你的代码,影响最小,但当然,如果你开始使用适当的 C++ 容器,如 vector
,i
变量可以很容易地消除因为元素和索引将自动维护。
此外,由于您一直对 char 数组使用等号 ('='),这有点不必要地浪费内存,如果文件很大,这可能会很严重。
我想说,将来使用关联容器对于您的 BXX
键及其右侧相应的 value
会更有效率。
关于c++ - 如何读取由空格分隔的数据并将其保存到数组,然后在 C++ 中的新文本文件中以其他顺序写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23454701/