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