读入文件中的单词搜索游戏C ++

时间:2013-12-09 19:12:46

标签: c++ vector fstream ifstream

我正在尝试阅读文件并创建一个2D矢量来存储游戏板以进行单词搜索游戏,但我似乎无法让它阅读比第一行更多。我确定这是一个很小的东西,但是我为'board'矢量放了一个测试显示,所有显示的都是文本文件的第一行。

以下是我的一些代码:

'Board.cpp'

#include "stdafx.h"
#include "Board.h"
#include <fstream>
#include <iostream>
using namespace std;


Board::Board(void)
: rows(0)
{
}


Board::~Board(void)
{
}

void Board::readInFile(void)
{
    ifstream indata;
    indata.open("Puzzle.txt");
    indata >> rows;
    for(int i = 0; i < rows; i++){
        char tmpChar;
        for(int j = 0; j < rows; j++){
            indata >> tmpChar;
            row.push_back(tmpChar);
        }
        board.push_back(row);
    }
    indata.close();
}

'Board.h'

#pragma once
#include <vector>
using namespace std;
class Board
{
public:
    Board(void);
    ~Board(void);
    void readInFile(void);
protected:
    vector<vector<char>> board;
    vector<char>row;    
protected:
    int rows;
};

以下是文本文件的设置方式:

16

BDXWASEESPHWEBGB

SIGJVAWDFLCTZIAM

ENKVESMARNAEBRRI

IKOEOPZLUKMVJDDL

KLIRELOBSNPOFWEC

SBOHKLLRHSIFPANA

RSKWMEEEPEITPTPE

EZPIELLLYMOOQCDH

TAWDLGGLZBUNDHOJ

ASIOJNFOPKAJAPBP

WLRCIILROZXLSCID

SKATEBOARDGCLCIA

LLABESABIVOTNVVE

VOFRISBEETMIEVZG

BWADEVAUCYCSWING

XNJFJPZHBTBFTSAW

1 个答案:

答案 0 :(得分:1)

有更好的方法来处理输入文件。首先,不要使用vector<char>,而只需使用std::string,而不是使用vector<vector<char> >,只需使用vector<string>。我不确定我理解为什么row是该类的成员,如果它仅用于填充board。无论何时您需要最后一件物品,您都可以board.back()*board.rbegin()

void Board::readInFile(void)
{
    ifstream indata("Puzzle.txt", ios::in);
    if(!ifstream.is_open())
        return;
    indata >> rows;    //you don't really need to do this if you take 
                         //the row count out of the file, but if you can't 
                         //change the file, leave it in so as not to corrupt 
                         //the loop that follows
    string line;
    while(getline(indata, line)){
        board.push_back(line);
    }
    indata.close();
}

实际上,您不需要让文件存储rows变量。


如果readInFile将文件名作为参数,那么你的函数也会更加可重用,因此它可以打开任何东西,而不是只打开一个特定的文件名。