Как передать 2D головоломку из файла - PullRequest
0 голосов
/ 19 октября 2019

У меня есть головоломка в файле, и я пытаюсь передать эту головоломку в 2D-массив, но я не могу определить новую строку, поэтому я не могу перейти к новой строке. Это загадка:

                00 00 00 00 01 02 04 05 00
                00 00 00 06 08 09 10 12 13
                00 00 00 17 19 14 15 18 07
                00 00 00 20 21 23 25 24 29
                22 26 28 35 34 31 33 38 39
                bb 30 31 34 32 36 03 11 16

Я читаю так:

string FileName;
fstream puzzle;
cout << "Please Enter the File Name : "  ;
cin >> FileName;
puzzle.open(FileName);
string s;
while(puzzle >> s){

    if(s == "bb"){
        arr[i][j] = 100;
        j++;
        counter++;
    }
    else{
        arr[i][j] = stoi(s);
        j++;
        counter++;
    }

}

1 Ответ

1 голос
/ 19 октября 2019

Вы можете прочитать файл построчно. В этом случае вам нужно добавить только один цикл

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

int main() {
    std::string filename;
    std::cout << "Please Enter the File Name : ";
    std::cin >> filename;
    std::ifstream puzzle(filename);
    if(!puzzle.is_open()) {
        std::cout << "Can't open file" << '\n';
        return EXIT_FAILURE;
    }
    std::vector<std::vector<int>> arr;
    std::string line;
    while(std::getline(puzzle, line)) {
        arr.emplace_back();
        std::stringstream str(line);
        std::string s;
        while(str >> s) {
            if(s == "bb") {
                arr.back().emplace_back(100);
            } else {
                arr.back().emplace_back(std::stoi(s));
            }
        }
    }

    for (const auto &line : arr) {
        for (const auto &field : line) {
            std::cout << field << ' ';
        }
        std::cout << '\n';
    }
    return EXIT_SUCCESS;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...