给出以下字符串(或任何字符串):“##### \ 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];
}
}
答案 0 :(得分:3)
不确定您要处理固定数量的行。下面的示例是保守的,它假定您事先不知道行数,并且每行的长度可能不同,因此它使用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;
}