文件输入到动态2D数组中

时间:2014-03-17 19:18:18

标签: c++ dynamic multidimensional-array

我正在尝试创建一个程序,为游戏peg solitaire生成解决方案。但是我真的被困在开头部分。这是将文件加入起始板而不是将这些值放在动态2D数组中。目前,当我运行程序时,我收到错误消息下标超出范围。因此,起始板从txt文件的顶行开始,其中包含两个代表行和列的数字,然后是电路板本身包含的字符。我的解构函数和tostring被注释掉了,因为它们也有问题,我摔倒了,他们已经连接起来了。

例如

(不是实际的板只表示NxN和char我希望加载到2d数组中)

3 3

SSS

SSS

SSS

头文件

#pragma once
#include <string>
#include <fstream>
#include <iostream>
#include <sstream>
using namespace std;
typedef unsigned char PegType;

class PegBoard
{
private:
   int numRows;
   int numCols;
   char ** pegBoard;

public:
//constructor
PegBoard(istream &input);

//deconstructor
 ~PegBoard();


//toString
 void toString() ;
}; //end of header file

实施档案

  #include "PegBoard.h"

//constructor
PegBoard::PegBoard(istream &input){
 string dummyline;
 numCols = 0;
 numRows = 0;
 pegBoard = new char* [numRows];

 //get rows and cols
 input >> numRows;
 input >> numCols;
 //generate starting board from txt file
    while(!input.eof()){
        for(int r=0; r <= numRows; r++){  
            getline(input,dummyline);
            pegBoard[r] = new char[numCols];
            for(int c=0; c<= numCols; c++){
                 pegBoard[r][c] = dummyline[c];
            }
        }
    }
}//end constructor

//deconstructor
PegBoard::~PegBoard(){
//  for (int i=0; i <= numRows; i++)
    //  delete [] peg[i];
    //  delete [] peg;
}//end deconstructor

//toString
void PegBoard::toString() {
    /*
    for(int r=0; r<numRows; r++){
        for(int c=0; c<numCols; c++)
            cout << peg[r][c];
            cout << endl;
    }
    */
}

1 个答案:

答案 0 :(得分:2)

你做得不好,非常糟糕的是你在从文件中分配值之前使用numRows。 所以改为:

 //get rows and cols
 input >> numRows;
 input >> numCols;
pegBoard = new char* [numRows];

在你的for循环中,你应该从0到numRows(numCols)-1。或者像这样:

for(int r=0; r < numRows; r++)

因为当你定义数组大小时,你会说numRows,所以我们计算[0,numRows)