如何初始化整数+字符串数组

时间:2018-07-26 12:26:49

标签: c++ arrays c++11 multidimensional-array delimiter

我是C ++的新手,需要帮助!我目前正在学习如何制作2D阵列或只是1D阵列。

我有一个文本文件,其内容如下所示,而我基本上是想将它们存储到数组中,还是更多?如果使用Struct,我只能有1个数组,还是根据下面文件中的内容有5个单独的数组?

我相信[1,2]可以形成2D数组,但是我该如何实现呢?

下面是我使用结构的代码,我不确定我是否做对了?

请帮助!

=========================================================
Sample Contents in 'HelloWorld.txt' File
=========================================================
[1, 2]-3-4-Hello_World
[5, 6]-7-8-World_Hello
[9, 1]-2-3-Welcome_Back
[4, 5]-6-7-World_Bye
[8, 9]-1-2-Bye_World

=========================================================
My Sample Codes
=========================================================
struct Example()
{
    fstream file;
    file.open("HelloWorld.txt");

    vector<string> abc; 
    string line;

    while(getline(file, line, '-'))
    {
        abc.push_back(line);

        int** a = new int*[abc.size()];
        for(int i = 0; i < abc.size(); i++)

        cout << abc[i] << endl;

        delete [] a;
    }
}

我的主要目标是能够将所有4个整数+ 1个字符串存储到数组中,并学习如何使用'[1,2]'->前两个整数点来创建2D数组。

等待建议!谢谢!

1 个答案:

答案 0 :(得分:0)

首先,使用c ++功能和数据结构。您可以使用向量代替数组,它更安全且易于使用。其次,您不必使用2D数组,而可以使用矢量的1D数组。我们的数据结构是您的结构向量的向量,您可以读取文件并使用这些值创建结构,然后将其放入向量中。

#include <fstream>
#include <string>
#include <vector>

struct MyData
{
    MyData():
        num1(0),
        num2(0),
        num3(0),
        num4(0),
        str("")
    { }

    int num1;
    int num2;
    int num3;
    int num4;
    std::string str;
};


void ReadFile(std::vector<MyData>& myVec)
{
    std::string fileName = "HelloWorld.txt";
    std::ifstream file(fileName, std::ios::binary);

    if (file.fail())
    {
        std::cout << "Error while reading";
        perror(fileName.c_str());
    }

    std::string line;
    while (std::getline(file, line))
    {
        //parse this line
        // store suitable values to the struct
        // MyData myStruct;
        // myStruct.num1 = ...
        // myStruct.num2 = ...
        // myStruct.num3 = ...
        // myStruct.num4 = ...
        // myStruct.str = ...
        //myVec.push_back(myStruct);
        // or you can directly use emplace_back that is more efficent
        // but is more complicated for you now..
        // you can practice...
    }
}

int main()
{
    std::vector<MyData> myVector;
    ReadFile(myVector);
    return 0;
}