从.txt文件的c++ 2d数组

C++ 2d array from .txt file

本文关键字:2d 数组 c++ txt 文件      更新时间:2023-10-16

我的代码打印出一个.txt文件的输出版本,该文件显示一个20x20的字符和空格表。我如何才能得到数组正确显示,因为它在。txt。我不能使用向量或全局变量。没有这些也可以做到。文本中的前两行分别是20和20,用于获取数组的尺寸。

ifstream inputFile;
int boardSizeRow;
int boardSizeCol;
inputFile.open("fileboard1.txt");
inputFile >> boardSizeRow;
inputFile >> boardSizeCol;
inputFile.get();
char gameBoard[20][20];
for (int row = 0; row < boardSizeRow; row++)
{
    for (int col = 0; col < boardSizeCol; col++)
    {
        gameBoard[row][col] = inputFile.get();
    }
}
for (int row = 0; row < boardSizeRow; row++) //////////////TO TEST PRINT
{
    for (int col = 0; col < boardSizeCol; col++)
    {
        cout << gameBoard[row][col];
    }
    inputFile.get();
    cout << endl;
}
return 0;

20
20
WWWWWWWWWWWWWWWWWWWW
  W GO  W          W
W WW      w    S   W      
W   W   GW  w      W  
WPW  WW          G W    
 WK       W        W     
W W W  W    w   w  W  
W WK W             W    
W   SW  U    w  w  W
                   W
    w          G   W
  G         w    w W 
D   wwwww          W
             w  D  W
w w   W w   w      W
    ww  w     w w  W
  G        w       W
    ww  w S    w   W
   WWW      G      W
WWWWWWWWWWWWWWWWWWWW

这就是答案:)好吧,有几个编辑:输入:

<>之前3.3.2 2 32 2 32 2 3之前

代码:

#include <fstream>
#include <iostream>
int main(){
using namespace std;
ifstream inputFile;
int boardSizeRow;
int boardSizeCol;
inputFile.open("fileboard1.txt");
inputFile >> boardSizeRow;
inputFile >> boardSizeCol;
char *gameBoard= new char[boardSizeRow*boardSizeCol];
for (int row = 0; row < boardSizeRow; row++)
{
    for (int col = 0; col < boardSizeCol; col++)
    {   
        inputFile >> *(gameBoard + boardSizeCol * row + col);
    }   
}
for (int row = 0; row < boardSizeRow; row++) //////////////TO TEST PRINT
{
    for (int col = 0; col < boardSizeCol; col++)
    {   
        cout << *(gameBoard + boardSizeCol * row + col) << " ";
    }   
    cout << endl;
}
delete []gameBoard
return 0;

}

From如何在c++中使用new声明2d数组?

只做:

inputFile >> boardSizeRow;
inputFile >> boardSizeCol;
char **gameBoardRow = new char*[boardSizeCol];
for(int i = 0; i < sizeY; ++i) {
    ary[i] = new char[boardSizeRow];
}
for (int row = 0; row < boardSizeRow; row++)
{
    for (int col = 0; col < boardSizeCol; col++)
    {   
        inputFile >> gameBoard[row][col];
     }   
}
for (int row = 0; row < boardSizeRow; row++) //////////////TO TEST PRINT
{
    for (int col = 0; col < boardSizeCol; col++)
    {   
        cout << gameBoard[row][col] << " ";
    }   
    cout << endl; 
}
for(int i = 0; i < boardSizeCol; ++i) {
    delete [] gameBoard[boardSizeRow];
}
delete [] gameBoard;

文件行与行之间包含换行符,您不需要处理它。因此,在您读取第一行之后,您将读取换行符的一个(或两个)字符作为第二行中的第一个字符。

我建议您使用std::string中的std::vector。每行一个字符串

类似:

inputFile >> boardSizeRows;
inputFile >> boardSizeCols;
// Skip newline after the number of columns
inputFile.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
// And the empty line after that
inputFile.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
// Declare our game board
std::vector<std::string> gameBoard;
// Read the board
std::string line;
for (int row = 0; row < boardSizeRows && std::getline(inputFile, line); row++)
    gameBoard.push_back(line);
// And finally print the board
for (const std::string& l : gameBoard)
    std::cout << l << 'n';

当读取文件时,for循环中的条件首先检查我们在文件中没有读取超过请求的内容,并且读取操作成功。


如果你的编译器不能处理c++ 11基于范围的for循环(用于打印board),你必须使用迭代器的"老式"方法:

std::vector<std::string>::const_iterator li;
for (li = gameBoard.begin(); li != gameBoard.end(); li++)
    std::cout << *li << 'n';