c ++ 11 — векторная матрица из многострочного файла переполнение стека

У меня есть файл, содержащий

99,0,0,0,0,0
99,1234,0011,4314,4901,4930
e.t.c.

Я хочу прочитать файл в 2D вектор целых чисел. Я довольно новичок в C ++. Все строки имеют х количество столбцов. Количество строк неизвестно. Все значения разделены запятой.

Я могу получить значения, считанные в 1-й вектор, но не могу понять, что матричная часть правильная.

Это то, что я имею до сих пор;

    #include <cstdlib>
#include <iostream>
#include <sstream>
#include <fstream>
#include <string.h>
#include <string>
#include <vector>
//declare data variables
using namespace std;

typedef vector<int> mline;
typedef vector<mline> matrix;

matrix sdata;
matrix confdata;

int writeFile();
int readFile();int main ()
{

readFile();
writeFile();

}

int writeFile ()
{
return 0;
}

int readFile()
{
int i = 0;
int j = 0;
//int k = 0;
int spos = 0;
int epos = 0;
int endpos = 0;
int slenght = 0;
int buffersize;
int tmpint;
stringstream outs;
mline tmpline;
string filename = "sensorbase.txt";
string tmp;
vector<string> bufferstr;
string delimiter = ",";
ifstream inputFile(filename);
string line;

while (getline(inputFile, line))
{
istringstream ss(line);
ss >> tmp;
bufferstr.push_back(tmp);
i++;
}
buffersize = bufferstr.size();

while(j<buffersize){
tmpline.clear();

endpos = bufferstr[j].rfind(delimiter);
slenght = bufferstr[j].size();

while (epos+1<endpos){
if (epos!=0){spos = epos+1;}
epos = bufferstr[j].find(delimiter, spos);

//printf("%s",bufferstr[j].substr(spos, epos-spos).c_str());
outs.clear();
outs << bufferstr[j].substr(spos, epos-spos);
outs >> tmpint;
tmpline.push_back(tmpint);

}
if (slenght>endpos){
spos = endpos+1;
//printf("%s",bufferstr[j].substr(spos, slenght-        endpos).c_str());
outs.clear();
outs << bufferstr[j].substr(spos, slenght-endpos);
outs >> tmpint;
tmpline.push_back(tmpint);
}
sdata.push_back(tmpline);
j++;
spos = 0;
epos = 0;
}

printf("A3 %i, B5 %i",sdata[0][0],sdata[0][1]);
return 0;
}

0

Решение

Ты можешь использовать std::getline с разделителем , чтобы получить целое число перед каждой запятой:

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

typedef std::vector<int>   mline;
typedef std::vector<mline> matrix;

int main()
{
std::ifstream in("sensorbase.txt");
matrix data;

for (std::string line, number; std::getline(in, line);)
{
mline temp;
std::istringstream iss(line);

while (std::getline(iss, number, ','))
{
temp.push_back(std::stoi(number));
}

data.push_back(temp);
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]