c++ - 如何读取由空格分隔的数据并将其保存到数组,然后在 C++ 中的新文本文件中以其他顺序写入

标签 c++ arrays csv

伪代码:

#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++ 容器,如 vectori 变量可以很容易地消除因为元素和索引将自动维护。

此外,由于您一直对 char 数组使用等号 ('='),这有点不必要地浪费内存,如果文件很大,这可能会很严重。

我想说,将来使用关联容器对于您的 BXX 键及其右侧相应的 value 会更有效率。

关于c++ - 如何读取由空格分隔的数据并将其保存到数组,然后在 C++ 中的新文本文件中以其他顺序写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23454701/

相关文章:

c++ - 扩展阵列容量

c++ - 如何将两个_pd 转换为一个_ps?

c++ - 调用cudaMemcpy2DToArray时访问违规读取位置

arrays - 使用 vb.net 替换数组中的文本

python - 如何将 csv 文件导入数据数组?

sqlite - 在python的多个选项卡中将数据从sqlite导出到Excel文件

c++ - 在不调用 QApplication::exec() 的情况下显示小部件的正确方法是什么?

c++ - 在 opengl 中渲染迷宫

c++ - 查找数组中某些元素的大小?

python - 使用 python 将文件加载到 numpy 数组中