Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从文本文件创建二维字符串向量_C++_Arrays_String_Vector - Fatal编程技术网

C++ 从文本文件创建二维字符串向量

C++ 从文本文件创建二维字符串向量,c++,arrays,string,vector,C++,Arrays,String,Vector,我在创建通过从文本文件读取值创建的字符串的2D向量时遇到了一些小问题。我最初认为我需要使用数组。然而,我逐渐意识到,向量更适合于我想要实现的目标 以下是我目前的代码: 我已经全局初始化了向量,但没有给它行数或列数,因为我希望在读取文件时确定行数或列数: vector<vector<string>> data; 然后,我有一个函数打开文件并尝试将字符串从text.txt复制到向量 void createVector() { ifstream myReadFile;

我在创建通过从文本文件读取值创建的字符串的2D向量时遇到了一些小问题。我最初认为我需要使用数组。然而,我逐渐意识到,向量更适合于我想要实现的目标

以下是我目前的代码:

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

vector<vector<string>> data;
然后,我有一个函数打开文件并尝试将字符串从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);
        }
    }
}
void createVector()
{
ifstreammyreadfile;
myReadFile.open(“text.txt”);
而(!myReadFile.eof()){
对于(int i=0;i<5;i++){
载体tmpVec;
串tmpString;
对于(int j=0;j<3;j++){
myReadFile>>tmpString;
tmpVec.推回(tmpString);
}
数据推回(tmpVec);
}
}
}
但是,当我尝试在主函数中检查向量的大小时,它返回值“0”

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

cout您应该首先使用
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();
}
#包括
#包括
#包括
#包括
typedef std::向量字符串数组;
std::矢量数据;
void createVector()
{
//...
std::字符串行,tempStr;
while(std::getline(myReadFile,line))
{
//加空向量
data.push_back(StringArray());
//现在分析这行代码
std::istringstream strm(线路);
while(strm>>tempStr)
//将字符串添加到最后添加的向量
data.back().push_back(tempStr);
}
}
int main()
{
createVector();

std::不能,但没有给它行数或列数,因为我想在我们阅读文件时确定:--那么为什么你在
createVector
函数中硬编码
5
3
?谢谢你的回复Paul。我知道最大列数是3,但我不知道f行(因为这是可以由程序中的其他函数更改的内容,即添加和删除元素).嗯,是不是你根本没有调用函数
createVector
,正如我在你的
main
中看到的那样?谢谢你花时间解释Paul,它真的为我澄清了问题!它工作得很好。
#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();
}