如何创建给定字符串的字符二维数组?

时间:2018-11-10 16:26:14

标签: c++ multidimensional-array graph maze

给出以下字符串(或任何字符串):“##### \ 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 :(得分:3)

不确定您要处理固定数量的行。下面的示例是保守的,它假定您事先不知道行数,并且每行的长度可能不同,因此它使用vectorstring的向量。

如果事先知道大小,则可以将其替换为数组。评论应使行为清晰明了。

#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;
}