从文本文件创建2D字符串向量

时间:2017-01-02 03:48:43

标签: c++ arrays string vector

我在创建通过从文本文件中读取值而创建的2D矢量字符串时遇到轻微的麻烦。我最初认为我需要使用数组。但是我已经意识到矢量会更适合我想要实现的目标。

到目前为止,这是我的代码:

我已经全局初始化了向量,但没有给出行数或列数,因为我希望在读取文件时确定它:

vector<vector<string>> data;

在名为&#34; test&#34;的文件中测试数据目前看起来像这样:

test1 test2 test3
blue1 blue2 blue3
frog1 frog2 frog3

然后我有一个打开文件的函数,并尝试将字符串从text.txt复制到向量。

void createVector()
{
    ifstream myReadFile;
    myReadFile.open("text.txt");

    while (!myReadFile.eof()) {
        for (int i = 0; i < 5; i++){
            vector<string> tmpVec;
            string tmpString;

                for (int j = 0; j < 3; j++){
                myReadFile >> tmpString;
                tmpVec.push_back(tmpString);
                }
            data.push_back(tmpVec);
        }
    }
}

但是,当我尝试在main函数中检查向量的大小时,它会返回值&#39; 0&#39;。

int main()
{
  cout << data.size();
}

我想我只需要一双新鲜的眼睛告诉我哪里出错了。我觉得问题在于createVector函数,尽管我并不是100%肯定。

谢谢!

1 个答案:

答案 0 :(得分:1)

您应该先使用std::getline获取数据行,然后从行中提取每个字符串并添加到矢量中。这样可以避免评论中指出的while -- eof()问题。

以下是一个例子:

#include <string>
#include <iostream>
#include <vector>
#include <sstream>

typedef std::vector<std::string> StringArray;

std::vector<StringArray> data;

void createVector()
{
    //...
    std::string line, tempStr;
    while (std::getline(myReadFile, line)) 
    {
        // add empty vector
        data.push_back(StringArray());

        // now parse the line 
        std::istringstream strm(line);
        while (strm >> tempStr)
            // add string to the last added vector
            data.back().push_back(tempStr);
    }
}

int main()
{
    createVector();
    std::cout << data.size();
}

Live Example