Как создать 2D-массив символов с заданной строкой? - PullRequest
0 голосов
/ 10 ноября 2018

Учитывая эту строку (или любую строку): "# #### \ n # # \ n # ## # \ n # # \ n ### ## \ n", Как я могу работать над кратчайшим путем решения лабиринта для моего класса структур данных и алгоритмов. Учитывая эту строку (или любую строку), как я могу сделать из нее 2D-массив? Таким образом, я могу просто пройти через 2d массив и, если это пробел, я могу создать новую вершину.

Например, это

"# #### \ n # # \ n # ## # \ n # # \ n ### ## \ n"

должно храниться в 2D массиве следующим образом:

 # ####

 #    #

 # ## #

 #    #

 ### ##

Я пытался реализовать это, но это не распечатало правильную вещь.

char ** grid;
for(int i = 0; i < maze.size(); i++){
    grid[i] = new char[numCols];
    for(int j = 0; j != '\n'; j++){
        cin >> grid[i][j];
    }
}

1 Ответ

0 голосов
/ 10 ноября 2018

Не уверен, что вы имеете дело с фиксированным количеством строк. Приведенный ниже пример является консервативным, он предполагает, что вы не знаете заранее количество строк и каждая строка может иметь разную длину, поэтому он использует вектор vector из string.

Вы можете заменить это на массивы, если заранее знаете размер. Комментарии должны прояснить поведение.

#include <iostream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;

int main()
{
   const char *s = "# ####\n#    #\n# ## #\n#    #\n### ##\n";

   istringstream is(s);  // associate the input string with an input stream

   vector<string> result;  // use string for each line because a vector of characters is a string

   string line;
   while(getline(is, line)) // use stream library to read until next \n character
        result.push_back(line);  // add line

   // demonstrate results
   for (size_t i = 0; i < result.size(); ++i) {
       for (size_t j = 0; j < result[i].length(); ++j)
           cout << result[i][j];
       cout << "\n";
   }

   return 0;
}
...