我试图创建一个像这样的矩阵
1 2 3
4 5 6
将是一个2x3矩阵。我试图使用以下代码
从文本文件中动态填充矩阵int main()
{
char c;
//Determine OS
#ifdef __unix
cout << "linux machine \n";
char dirinp[50] = "~/temp/coursein/p3-in.txt";
char dirout[50] = "~/temp/fileio/p3-out.txt";
#endif
#ifdef _WIN32
cout << "windows machine \n";
char dirinp[50] = "C:\\temp\\coursein\\p3-in.txt";
char dirout[50] = "C:\\temp\\coursein\\p3-out.txt";
#endif
//Open file
ifstream infile, outfile;
infile.open(dirinp);
if (!infile)
{
cout << "Couldn't open file";
}
infile.get(c);
int col = 0, row = 0;
while(!infile.eof())
{
if (c == '\n')
{
col = col + 1;
cout << "\ncol: " << col << endl;
}
//cout << c;
if (isdigit(c))
{
//cout << "its a digit";
int num = c - '0';
matrix[col].push_back(num);
cout << num << " added to matrix ";
}
infile.get(c);
}
我的主要想法是你通过字符搜索文件字符来搜索换行符。如果字符是数字(isdigit(c)== true),则将该元素推送到矩阵的该行。如果到达换行符,请转到矩阵的下一个垂直行,然后从左到右开始填充向量。
答案 0 :(得分:0)
如果矩阵是
std::vector<std::vector<int>> matrix;
那么你所拥有的几乎可以工作。将col = col + 1
替换为
col = col + 1;
matrix.push_back(std::vector<int>());
如果你想要一个int **
,那么你可以在退出while循环后循环matrix
int **mat = new int[matrix.size()][matrix[0].size()];
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix[i].size(); j++) {
mat[i][j] = matrix[i][j];
}
}